summaryrefslogtreecommitdiffstats
path: root/Lib/threading.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-11-09 16:52:46 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2009-11-09 16:52:46 (GMT)
commit959f3e50322467b9d894de67b118eb688753f9f1 (patch)
tree3368d6ff7fcaf4ff8923f72b89643de9634fb344 /Lib/threading.py
parent536d299ca0d06c249f2674266acaf4fc4411d5bf (diff)
downloadcpython-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.py18
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):