Python 2.7.x fixes for new gil_scoped_release

This commit is contained in:
Wenzel Jakob 2016-04-25 09:16:41 +02:00
parent 084ca0e553
commit 2f6662e174

View File

@ -1122,15 +1122,26 @@ class gil_scoped_release {
public:
gil_scoped_release(bool disassoc = false) : disassoc(disassoc) {
tstate = PyEval_SaveThread();
if (disassoc)
PyThread_set_key_value(detail::get_internals().tstate, nullptr);
if (disassoc) {
int key = detail::get_internals().tstate;
#if PY_MAJOR_VERSION < 3
PyThread_delete_key_value(key);
#else
PyThread_set_key_value(key, nullptr);
#endif
}
}
~gil_scoped_release() {
if (!tstate)
return;
PyEval_RestoreThread(tstate);
if (disassoc)
PyThread_set_key_value(detail::get_internals().tstate, tstate);
if (disassoc) {
int key = detail::get_internals().tstate;
#if PY_MAJOR_VERSION < 3
PyThread_delete_key_value(key);
#endif
PyThread_set_key_value(key, tstate);
}
}
private:
PyThreadState *tstate;