diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-11-09 16:52:46 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-11-09 16:52:46 (GMT) |
commit | 959f3e50322467b9d894de67b118eb688753f9f1 (patch) | |
tree | 3368d6ff7fcaf4ff8923f72b89643de9634fb344 /Lib/threading.py | |
parent | 536d299ca0d06c249f2674266acaf4fc4411d5bf (diff) | |
download | cpython-959f3e50322467b9d894de67b118eb688753f9f1.zip cpython-959f3e50322467b9d894de67b118eb688753f9f1.tar.gz cpython-959f3e50322467b9d894de67b118eb688753f9f1.tar.bz2 |
Merged revisions 76138,76173 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r76138 | antoine.pitrou | 2009-11-06 23:41:14 +0100 (ven., 06 nov. 2009) | 10 lines
Merged revisions 76137 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r76137 | antoine.pitrou | 2009-11-06 23:34:35 +0100 (ven., 06 nov. 2009) | 4 lines
Issue #7270: Add some dedicated unit tests for multi-thread synchronization
primitives such as Lock, RLock, Condition, Event and Semaphore.
........
................
r76173 | antoine.pitrou | 2009-11-09 17:08:16 +0100 (lun., 09 nov. 2009) | 11 lines
Merged revisions 76172 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r76172 | antoine.pitrou | 2009-11-09 17:00:11 +0100 (lun., 09 nov. 2009) | 5 lines
Issue #7282: Fix a memory leak when an RLock was used in a thread other
than those started through `threading.Thread` (for example, using
`thread.start_new_thread()`.
........
................
Diffstat (limited to 'Lib/threading.py')
-rw-r--r-- | Lib/threading.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/Lib/threading.py b/Lib/threading.py index d5412e9..4bb0182 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -92,14 +92,16 @@ class _RLock(_Verbose): def __repr__(self): owner = self._owner - return "<%s(%s, %d)>" % ( - self.__class__.__name__, - owner and owner.name, - self._count) + try: + owner = _active[owner].name + except KeyError: + pass + return "<%s owner=%r count=%d>" % ( + self.__class__.__name__, owner, self._count) def acquire(self, blocking=True): - me = current_thread() - if self._owner is me: + me = _get_ident() + if self._owner == me: self._count = self._count + 1 if __debug__: self._note("%s.acquire(%s): recursive success", self, blocking) @@ -118,7 +120,7 @@ class _RLock(_Verbose): __enter__ = acquire def release(self): - if self._owner is not current_thread(): + if self._owner != _get_ident(): raise RuntimeError("cannot release un-acquired lock") self._count = count = self._count - 1 if not count: @@ -152,7 +154,7 @@ class _RLock(_Verbose): return (count, owner) def _is_owned(self): - return self._owner is current_thread() + return self._owner == _get_ident() def Condition(*args, **kwargs): |