• Julien Muchembled's avatar
    Several improvements to verbose locks · 5dc1f06c
    Julien Muchembled authored
    All these changes were useful to debug deadlocks in threaded tests:
    - New verbose Semaphore.
    - Logs with numerical 'ident' were too annoying to read so revert to thread
      name (before commit 5b69d553), with an
      exception for threaded tests. There remains one case where the result is not
      unique: when several client apps are instantiated.
    - Make deadlock detection optional.
    - Make it possible to name locks.
    - Make output more compact.
    - Remove useless 'debug_lock' option.
    - Add timing information.
    - Make exception more verbose when an un-acquired lock is released.
    
    Here is how I used 'locking':
    
    --- a/neo/tests/threaded/__init__.py
    +++ b/neo/tests/threaded/__init__.py
    @@ -37,0 +38 @@
    +from neo.lib.locking import VerboseSemaphore
    @@ -71 +72,2 @@ def init(cls):
    -        cls._global_lock = threading.Semaphore(0)
    +        cls._global_lock = VerboseSemaphore(0, check_owner=False,
    +                                            name="Serialized._global_lock")
    @@ -265 +267,2 @@ def start(self):
    -        self.em._lock = l = threading.Semaphore(0)
    +        self.em._lock = l = VerboseSemaphore(0, check_owner=False,
    +                                             name=self.node_name)
    @@ -346 +349,2 @@ def __init__(self, master_nodes, name, **kw):
    -        self.em._lock = threading.Semaphore(0)
    +        self.em._lock = VerboseSemaphore(0, check_owner=False,
    +                                         name=repr(self))
    5dc1f06c
Name
Last commit
Last update
neo Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
BUGS Loading commit data...
CHANGES Loading commit data...
COPYING Loading commit data...
MANIFEST.in Loading commit data...
README Loading commit data...
TESTS.txt Loading commit data...
TODO Loading commit data...
UPGRADE Loading commit data...
ZODB3.patch Loading commit data...
importer.conf Loading commit data...
neo.conf Loading commit data...
neoadmin Loading commit data...
neoctl Loading commit data...
neolog Loading commit data...
neomaster Loading commit data...
neomigrate Loading commit data...
neostorage Loading commit data...
setup.py Loading commit data...