mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-28 15:53:55 -04:00
distributed: Fix segfault when ConnectionRepository is verbose by holding GIL
Also removes obsolete USE_PYTHON_2_2_OR_EARLIER macro Closes #1430
This commit is contained in:
parent
e696ac4046
commit
6cb074e5c8
@ -693,11 +693,7 @@ handle_update_field() {
|
||||
PyObject_GetAttrString(_python_repository, "doId2do");
|
||||
nassertr(doId2do != nullptr, false);
|
||||
|
||||
#ifdef USE_PYTHON_2_2_OR_EARLIER
|
||||
PyObject *doId = PyInt_FromLong(do_id);
|
||||
#else
|
||||
PyObject *doId = PyLong_FromUnsignedLong(do_id);
|
||||
#endif
|
||||
PyObject *distobj = PyDict_GetItem(doId2do, doId);
|
||||
Py_DECREF(doId);
|
||||
Py_DECREF(doId2do);
|
||||
@ -784,11 +780,7 @@ handle_update_field_owner() {
|
||||
PyObject_GetAttrString(_python_repository, "doId2ownerView");
|
||||
nassertr(doId2ownerView != nullptr, false);
|
||||
|
||||
#ifdef USE_PYTHON_2_2_OR_EARLIER
|
||||
PyObject *doId = PyInt_FromLong(do_id);
|
||||
#else
|
||||
PyObject *doId = PyLong_FromUnsignedLong(do_id);
|
||||
#endif
|
||||
|
||||
// pass the update to the owner view first
|
||||
PyObject *distobjOV = PyDict_GetItem(doId2ownerView, doId);
|
||||
@ -893,7 +885,7 @@ describe_message(std::ostream &out, const string &prefix,
|
||||
|
||||
packer.set_unpack_data((const char *)dg.get_data(), dg.get_length(), false);
|
||||
CHANNEL_TYPE do_id;
|
||||
int msg_type;
|
||||
unsigned int msg_type;
|
||||
bool is_update = false;
|
||||
string full_prefix = "CR::" + prefix;
|
||||
|
||||
@ -919,7 +911,12 @@ describe_message(std::ostream &out, const string &prefix,
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
if (_python_repository != nullptr) {
|
||||
PyObject *msgId = PyLong_FromLong(msg_type);
|
||||
#if defined(HAVE_THREADS) && !defined(SIMPLE_THREADS)
|
||||
PyGILState_STATE gstate;
|
||||
gstate = PyGILState_Ensure();
|
||||
#endif
|
||||
|
||||
PyObject *msgId = PyLong_FromUnsignedLong(msg_type);
|
||||
nassertv(msgId != nullptr);
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
PyObject *methodName = PyUnicode_FromString("_getMsgName");
|
||||
@ -941,6 +938,10 @@ describe_message(std::ostream &out, const string &prefix,
|
||||
Py_DECREF(methodName);
|
||||
Py_DECREF(msgId);
|
||||
Py_DECREF(result);
|
||||
|
||||
#if defined(HAVE_THREADS) && !defined(SIMPLE_THREADS)
|
||||
PyGILState_Release(gstate);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if (msgName.length() == 0) {
|
||||
@ -959,15 +960,16 @@ describe_message(std::ostream &out, const string &prefix,
|
||||
|
||||
#ifdef HAVE_PYTHON
|
||||
if (_python_repository != nullptr) {
|
||||
#if defined(HAVE_THREADS) && !defined(SIMPLE_THREADS)
|
||||
PyGILState_STATE gstate;
|
||||
gstate = PyGILState_Ensure();
|
||||
#endif
|
||||
|
||||
PyObject *doId2do =
|
||||
PyObject_GetAttrString(_python_repository, "doId2do");
|
||||
nassertv(doId2do != nullptr);
|
||||
|
||||
#ifdef USE_PYTHON_2_2_OR_EARLIER
|
||||
PyObject *doId = PyInt_FromLong(do_id);
|
||||
#else
|
||||
PyObject *doId = PyLong_FromUnsignedLong(do_id);
|
||||
#endif
|
||||
PyObject *distobj = PyDict_GetItem(doId2do, doId);
|
||||
Py_DECREF(doId);
|
||||
Py_DECREF(doId2do);
|
||||
@ -983,6 +985,10 @@ describe_message(std::ostream &out, const string &prefix,
|
||||
dclass = (DCClass *)PyLong_AsVoidPtr(dclass_this);
|
||||
Py_DECREF(dclass_this);
|
||||
}
|
||||
|
||||
#if defined(HAVE_THREADS) && !defined(SIMPLE_THREADS)
|
||||
PyGILState_Release(gstate);
|
||||
#endif
|
||||
}
|
||||
#endif // HAVE_PYTHON
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user