Commit d96606e2 authored by Peter Eastman's avatar Peter Eastman
Browse files

Ensure Python interpreter lock gets reacquired when an exception is thrown.

parent 53d469c5
...@@ -9,23 +9,25 @@ ...@@ -9,23 +9,25 @@
} }
%exception *::step { %exception *::step {
PyThreadState* _savePythonThreadState = PyEval_SaveThread();
try { try {
Py_BEGIN_ALLOW_THREADS
$action $action
Py_END_ALLOW_THREADS
} catch (std::exception &e) { } catch (std::exception &e) {
PyEval_RestoreThread(_savePythonThreadState);
PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what())); PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what()));
return NULL; return NULL;
} }
PyEval_RestoreThread(_savePythonThreadState);
} }
%exception OpenMM::LocalEnergyMinimizer::minimize { %exception OpenMM::LocalEnergyMinimizer::minimize {
PyThreadState* _savePythonThreadState = PyEval_SaveThread();
try { try {
Py_BEGIN_ALLOW_THREADS
$action $action
Py_END_ALLOW_THREADS
} catch (std::exception &e) { } catch (std::exception &e) {
PyEval_RestoreThread(_savePythonThreadState);
PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what())); PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what()));
return NULL; return NULL;
} }
PyEval_RestoreThread(_savePythonThreadState);
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment