Commit 87d52603 authored by Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 83918 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r83918 | antoine.pitrou | 2010-08-10 00:38:19 +0200 (mar., 10 août 2010) | 5 lines

  Issue #3757: thread-local objects now support cyclic garbage collection.
  Thread-local objects involved in reference cycles will be deallocated
  timely by the cyclic GC, even if the underlying thread is still running.
........
parent 7a956cc7
...@@ -38,9 +38,9 @@ class BaseLocalTest: ...@@ -38,9 +38,9 @@ class BaseLocalTest:
gc.collect() gc.collect()
self.assertEqual(len(weaklist), n) self.assertEqual(len(weaklist), n)
# XXX threading.local keeps the local of the last stopped thread alive. # XXX _threading_local keeps the local of the last stopped thread alive.
deadlist = [weak for weak in weaklist if weak() is None] deadlist = [weak for weak in weaklist if weak() is None]
self.assertEqual(len(deadlist), n-1) self.assertIn(len(deadlist), (n-1, n))
# Assignment to the same thread local frees it sometimes (!) # Assignment to the same thread local frees it sometimes (!)
local.someothervar = None local.someothervar = None
...@@ -116,6 +116,20 @@ class BaseLocalTest: ...@@ -116,6 +116,20 @@ class BaseLocalTest:
class ThreadLocalTest(unittest.TestCase, BaseLocalTest): class ThreadLocalTest(unittest.TestCase, BaseLocalTest):
_local = _thread._local _local = _thread._local
# Fails for the pure Python implementation
def test_cycle_collection(self):
class X:
pass
x = X()
x.local = self._local()
x.local.x = x
wr = weakref.ref(x)
del x
gc.collect()
self.assertIs(wr(), None)
class PyThreadingLocalTest(unittest.TestCase, BaseLocalTest): class PyThreadingLocalTest(unittest.TestCase, BaseLocalTest):
_local = _threading_local.local _local = _threading_local.local
......
...@@ -98,6 +98,10 @@ C-API ...@@ -98,6 +98,10 @@ C-API
Library Library
------- -------
- Issue #3757: thread-local objects now support cyclic garbage collection.
Thread-local objects involved in reference cycles will be deallocated
timely by the cyclic GC, even if the underlying thread is still running.
- Fix Issue8280 - urllib2's Request method will remove fragements in the url. - Fix Issue8280 - urllib2's Request method will remove fragements in the url.
This is how it is supposed to work, wget and curl do the same. Previous This is how it is supposed to work, wget and curl do the same. Previous
behavior was wrong. behavior was wrong.
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment