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 <[email protected]>
<http://bugs.python.org/issue8800>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com