[ZODB-Dev] ZEO under Py 2.4: Cache verification hangs in Python os.path.abspath()

Tim Peters tim.peters at gmail.com
Thu Apr 20 15:09:48 EDT 2006


[Martin Gfeller, attacks a ZEO hang on Windows]
> ...

Man, that sucks!  Looks like a Python bug to me, probably specific to
Windows, and (as you discovered) introduced in Python 2.4, but
deliberately not backported to 2.3.  I opened a Python tracker item
with a minimal hanging test case:

    http://www.python.org/sf/1473760

> ...
> My code uses no threads, apart from those created by ZEO itself.

A thread is needed to provoke an import hang, but ZEO creates quite
enough threads all by itself.  "This kind of thing" generally requires
that a thread get spawned as a _side effect_ of doing an import(*),
but offhand I don't recall any code in ZODB/ZEO that does that.  If
that rings a bell for anyone else, that would be an approach to
worming around the bug in the ZODB/ZEO code.

It's curious that nobody else reported this before, and ZODB's test
suite certainly doesn't provoke it (that's been run under Python 2.4
since before 2.4a1).



(*) Python's internal import lock is reentrant wrt the thread currently
    doing an import, but blocks other threads from doing an import.
    So the usual fatal dance starts like so:

       thread A does an import of module M
       code in module M spawns another thread B, and starts B running
       code in thread B tries to do an import, but is blocked because
           thread A's import (of M) is still in progress
       thread A continues the process of importing M, and M does
           something that waits for thread B to accomplish something

    There the whole shebang deadlocks:  A is waiting for B to do something,
    and the import of M can't complete until A makes progress.  But B
    is waiting for the import of M to complete.

    Hmm.  I suppose there's some way for asyncore running in its own
    thread to fatally confuse the import lock too, but I haven't bumped
    into that myself.


More information about the ZODB-Dev mailing list