[lldb] Fix D114722 for python<=3.6
_Py_IsFinalizing was called _Py_Finalizing back then (and it was a variable instead of a function).
This commit is contained in:
@@ -69,6 +69,28 @@ Expected<std::string> python::As<std::string>(Expected<PythonObject> &&obj) {
|
||||
return std::string(utf8.get());
|
||||
}
|
||||
|
||||
static bool python_is_finalizing() {
|
||||
#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7
|
||||
return _Py_Finalizing != nullptr;
|
||||
#else
|
||||
return _Py_IsFinalizing();
|
||||
#endif
|
||||
}
|
||||
|
||||
void PythonObject::Reset() {
|
||||
if (m_py_obj && Py_IsInitialized()) {
|
||||
if (python_is_finalizing()) {
|
||||
// Leak m_py_obj rather than crashing the process.
|
||||
// https://docs.python.org/3/c-api/init.html#c.PyGILState_Ensure
|
||||
} else {
|
||||
PyGILState_STATE state = PyGILState_Ensure();
|
||||
Py_DECREF(m_py_obj);
|
||||
PyGILState_Release(state);
|
||||
}
|
||||
}
|
||||
m_py_obj = nullptr;
|
||||
}
|
||||
|
||||
Expected<long long> PythonObject::AsLongLong() const {
|
||||
if (!m_py_obj)
|
||||
return nullDeref();
|
||||
|
||||
Reference in New Issue
Block a user