Richard Oudkerk added the comment:

Attached is a new version of Kristjan's patch with support for managers.  (A 
threading._RWLockCore object is proxied and wrapped in a local instance of a 
subclass of threading.RWLock.)

Also I made multiprocessing.RWLock.__init__() use 
multiprocessing.util.register_after_fork() to clear self._owners.  Otherwise on 
Unix you can run into trouble if a forked processes starts a new thread whose 
id was in self._owners at the time of the fork.

I found that test_many_readers() and test_recursion() tended to fail when run 
with processes (on Windows).  This is because starting a process on Windows is 
slow, particularly with a debug build.  (Some of the buildbots running Windows 
in a VM can be crazily slow.)  Each reader only held the lock for 0.02 secs 
which is much less than the time to start a process on Windows.  This meant 
that it was easy to never have overlapping ownership, causing the tests to fail.

I fixed this by starting the readers while holding an exclusive, waiting for 
period, and then releasing the exclusive lock.  This makes it possible to change

    self.assertTrue(max(nlocked) > 1)

to

    self.assertEqual(max(nlocked), N)

Choosing timeouts to keep the buildbots happy can be a pain:-(

----------
Added file: http://bugs.python.org/file27421/rwlock-sbt.patch

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

Reply via email to