[Libguestfs] [PATCH NOT WORKING nbdkit 0/3] python: Allow thread model to be set from Python plugins.

Daniel P. Berrangé berrange at redhat.com
Wed Aug 5 15:50:53 UTC 2020


On Wed, Aug 05, 2020 at 04:40:26PM +0100, Richard W.M. Jones wrote:
> Patch 2 certainly allows you to set the thread model.  However patch 3
> shows that if you set it to nbdkit.THREAD_MODEL_PARALLEL it will
> crash.
> 
> If you look closely at the stack trace (attached below) you can see
> that ignoring threads which are in parts of nbdkit unrelated to
> Python:
> 
> Thread 4: In pread, waiting in time.sleep().  This thread has released
>           the GIL.

Has it - I'm not seeing any call to PyEval_SaveThread()/RestoreThread
which is needed to release the GIL when going from Python to C.

> 
> Thread 2: Started to process a pread call but didn't reach Python code yet.
> 
> Thread 1: In pread, segfaults when checking if pread() is defined
>           in the Python code.
> 
> My understanding is this should all be OK and there's no reason for
> Python to crash here.  I wonder if it's because we're calling "down"
> into Python from C, rather than the usual way of calling from Python
> into C.

I'm also not seeing any coodes to PyGILState_Ensure()/Release which is
needed call into Python from C.

Without these calls, random crashes are certainly expected.

What libvirt-python does is 

eg

    PyThreadState *_save = NULL;
    if (PyEval_ThreadsInitialized())  
      _save = PyEval_SaveThread();

    ...call C functions...

    if (PyEval_ThreadsInitialized())
       PyEval_RestoreThread(_save);


and 

    PyGILState_STATE _save = PyGILState_UNLOCKED;
    
    if (PyEval_ThreadsInitialized())
      _save = PyGILState_Ensure();

    ... call Python functions...

    if (PyEval_ThreadsInitialized())
      PyGILState_Release(_save);

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the Libguestfs mailing list