Several improvements to verbose locks
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))
Showing
Please register or sign in to comment