On everyones favorite platform (HP-UX), the following code consistently fails:
### from thread import start_new_thread, allocate_lock from time import sleep def bootstrap(): from os import fork ; fork() allocate_lock().acquire() start_new_thread(bootstrap, ()) sleep(.1) ### The error is: Fatal Python error: Invalid thread state for this thread This code was whittled down from test_socketserver which fails in the same way. It doesn't matter what value is passed to sleep as long as it's greater than 0. I also tried changing the sleep to a while 1: pass and the same problem occurred. So there isn't a huge interaction of APIs, only: fork, allocate_lock.acquire and start_new_thread. HP-UX seems to be more sensitive to various threading issues. In Modules/_test_capimodule.c, I had to make this modification: Index: Modules/_testcapimodule.c =================================================================== --- Modules/_testcapimodule.c (revision 51875) +++ Modules/_testcapimodule.c (working copy) @@ -665,6 +665,9 @@ PyThread_acquire_lock(thread_done, 1); /* wait for thread to finish */ Py_END_ALLOW_THREADS + /* Release lock we acquired above. This is required on HP-UX. */ + PyThread_release_lock(thread_done); + PyThread_free_lock(thread_done); Py_RETURN_NONE; } Without that patch, there would be this error: sem_destroy: Device busy sem_init: Device busy Fatal Python error: UNREF invalid object ABORT instruction (core dumped) Anyone have any ideas? n _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com