Hello,

I have successfully built Python 3.8.1 on QNX, but ran into a problem when 
using 'make -j4'. The build process invariably hangs with multiple 
single-threaded child processes stuck indefinitely waiting on semaphores. These 
semaphores will clearly never be posted to, as the processes are all single 
threaded and the semaphores are not shared with any other process.
A backtrace shows that the the offending calls come from run_at_forkers(), 
which is not surprising. I consider a multi-threaded fork() to be an 
ill-defined operation and my arch-nemesis... The problem here is that the value 
of the semaphore inherited from the parent shows the semaphore to be 
unavailable, even though the semaphore *object* itself is not the same as the 
one used by the parent (they share the same virtual address, but in different 
address spaces with different backing memory).

A few (noob) questions:
1. Is there a way to correlate the C backtrace from the core dump to the Python 
code that resulted in this hang?
2. It is well-known that a multi-threaded fork() is inherently unsafe, and 
POSIX says that no non-async-signal-safe operations are allowed between the 
fork() and exec() calls. I even saw comments to this effect in the Python 
source code ;-) So why is it done?
3. Any reason not to use posix_spawn() instead of fork()/exec()? While some 
systems implement posix_spawn() with fork()/exec() others (at least QNX) 
implements it without first creating a duplicate of the parent, making it both 
more efficient and safer in a multi-threaded parent.
4. thread_pthread.h seems to go to great lengths to implement locks without 
using native mutexes. I found one reference in the code dating to 1994 as to 
why that is done. Is it still applicable? Contrary to the claim in that comment 
the semantics for trying to lock an already-locked mutex and for unlocking an 
unowned mutex are well-defined.

Thanks,
--Elad
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/PTJ3UAZNYBYBYQ4WLMSERZR2XIVWISLM/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to