[Python-Dev] Re: Revised 1.6 jobs list
Mark Hammond
mhammond@skippinet.com.au
Tue, 6 Jun 2000 09:47:44 +1000
> I tried to reproduce the problem with a C program but could not.
> When things hang the forking thread is stuck in wait4() while the
> child process is suspended:
This looks very suspect.
>
> #0 0x4027d9ba in sigsuspend () from /lib/libc.so.6
> #1 0x40232c77 in __pthread_wait_for_restart_signal ()
> from /lib/libpthread.so.0
> #2 0x4023406e in __pthread_lock () from /lib/libpthread.so.0
> #3 0x4023186a in pthread_mutex_lock () from /lib/libpthread.so.0
> #4 0x806fbaa in PyThread_release_lock (lock=0x81ebb68) at
> thread_pthread.h:339
> #5 0x805617b in eval_code2 (co=0x81eca68, globals=0x81c4f64,
And very much like the Python thread-state is not being managed correctly
with fork. From my understanding of fork (which is small), and of the
Python thread-state management, this doesnt surprise me.
Given the stack trace, it appears that Python is doing its periodic
thread-release as part of running around the main loop.
In the process of _releasing_ the thread-lock, it needs to _acquire_ a
mutex. I dont know the Python threading on pthreads at all - would this be
correct (it would seem likely that such an implementation would be done).
But in the process of acquiring that mutex, we call
__pthread_wait_for_restart_signal()
Is it possible that is is something as simple as thread-idents changing
underneath Python when using fork? It seems to me that the thread thinks
it is either new, or stale?
Just my 2c worth - and given my knowledge of Linux and pthreads, plus the
state of our dollar at the moment, it has better be AUD $0.02 :-)
Mark.