Hi all, I have fixed a small typo on the patch and am sending an updated version. I've tried creating a small test-case for this, but I can only get errors (due to lldb not locking the GIL) when running a fully-fledged debugger built on the lldb Python API, which would be overkill for the test cases.
Regards, Filipe On Tuesday, April 10, 2012 at 10:15 PM, Filipe Cabecinhas wrote: > Hi all, > > As has been discussed here, the ScriptInterpreterPython class has its own > locking, completely separate from the Python GIL. That won't work. > > For GIL to work correctly, we have to release it when calling the lldb API > from Python[1] (compile the swig definitions file with -threads and it will > generate the appropriate calls), and lock it before calling any* Python > function, in ScriptInterpreterPython. We also need to initialize the Python > thread for the embedded interpreter thread that we create outside of > Python-land[2]. > > The attached patch corrects ScriptInterpreterPython's locking mechanism to > use the GIL, through the PyFILState_Ensure() and PyGILState_Release() > functions. Each ScriptInterepreterPython::Locker object will lock the GIL in > its constructor and unlock it in its destructor. The ScriptInterpreterPython > initialization function also initializes the Python thread, if needed. > > If we continue not using the GIL, any threaded Python program that uses lldb > risks segfaulting at any time, due to lldb not locking the GIL and allowing > other Python threads to run at the same time. > > Regards, > > Filipe > > > [1] > http://docs.python.org/c-api/init.html?highlight=pygilstate_ensure#releasing-the-gil-from-extension-code > [2] > http://docs.python.org/c-api/init.html?highlight=pygilstate_ensure#non-python-created-threads > > * - Some Python functions are safe to call without holding the GIL, such as > initialization functions, and initialization state queries. > > > Attachments: > - lldb-use-GIL.patch >
lldb-use-GIL.patch
Description: Binary data
_______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
