This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author nikratio
Recipients brian.curtin, loewis, marcin.bachry, nikratio, pitrou, theller
Date 2010-01-20.12:12:10
SpamBayes Score 9.566457e-10
Marked as misclassified No
Message-id <1263989532.89.0.00442189156209.issue7736@psf.upfronthosting.co.za>
In-reply-to
Content
In this simple example, FUSE does not fork and does not start any threads.

Note that PyGILState_Ensure() cannot do anything here. What happens is this:

 - call_hello.py calls FUSE in a new thread, releasing the GIL.
 - FUSE mounts the file system and waits for requests
 - Meanwhile, in the main thread, call_hello.py calls opendir(), but does not release the GIL
 - FUSE receives the opendir() system call and calls the appropriate callback function
 - If the callback function is implemented in C, everything works fine.
 - If the callback function is implemented in Python, the FUSE thread tries to acquire the GIL to call the (Python) opendir() handler. But it cannot do so, because the GIL is still held by the main thread (which is waiting for the opendir syscall to return) => deadlock.
History
Date User Action Args
2010-01-20 12:12:12nikratiosetrecipients: + nikratio, loewis, theller, pitrou, marcin.bachry, brian.curtin
2010-01-20 12:12:12nikratiosetmessageid: <1263989532.89.0.00442189156209.issue7736@psf.upfronthosting.co.za>
2010-01-20 12:12:11nikratiolinkissue7736 messages
2010-01-20 12:12:10nikratiocreate