• Gregory P. Smith's avatar
    bpo-6721: Hold logging locks across fork() (GH-4071) · 19003841
    Gregory P. Smith yazdı
    bpo-6721: When os.fork() was called while another thread holds a logging lock, the child process may deadlock when it tries to log.  This fixes that by acquiring all logging locks before fork and releasing them afterwards.
    
    A regression test that fails before this change is included.
    
    Within the new unittest itself: There is a small _potential_ due to mixing of fork and a thread in the child process if the parent's thread happened to hold a non-reentrant library call lock (malloc?) when the os.fork() happens.  buildbots and time will tell if this actually manifests itself in this test or not.  :/  A functionality test that avoids that would be a challenge.
    
    An alternate test that isn't trying to produce the deadlock itself but just checking that the release and acquire calls are made would be the next best alternative if so.
    19003841
__init__.py 73.6 KB