Nick Coghlan <ncogh...@gmail.com> added the comment:

Added Greg to nosy list as the one that fixed issue 7242 with the current 
_PyImport_ReInitLock semantics.

Also kicking over to Barry regarding implications for 2.6.6 (this is a 
regression from 2.6.4 due to the resolution of 7242).

7242 was about forking from a *thread*. This is about forking as a side effect 
of import, which, just like spawning a thread as a side effect of import, can 
easily cause issues.

The RuntimeError noted by the OP isn't thrown by the fork() call - it is thrown 
at the end of the import when control is returned to the main module. 
Completely reinitialising the lock without accounting for the current depth of 
nesting is incorrect. Instead, I believe ReInitLock should look more like:

    if (import_lock != NULL)
        import_lock = PyThread_allocate_lock();
    if (import_lock_level > 1) {
        /* Forked as a side effect of import */
        long me = PyThread_get_thread_ident();
        import_lock_thread = me;
        import_lock_level--;
    } else {
        import_lock_thread = -1;
        import_lock_level = 0;
    }

(I haven't tested that yet, but will soon)

----------
assignee:  -> barry
nosy: +barry, gregory.p.smith
priority: normal -> release blocker

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue9573>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to