[Python-checkins] cpython (2.7): Issue #20006: Fix sporadic failures in test_weakset.
antoine.pitrou
python-checkins at python.org
Wed Dec 18 00:28:44 CET 2013
http://hg.python.org/cpython/rev/226c37c209fc
changeset: 88032:226c37c209fc
branch: 2.7
parent: 88029:ebace0a5a33e
user: Antoine Pitrou <solipsis at pitrou.net>
date: Wed Dec 18 00:28:36 2013 +0100
summary:
Issue #20006: Fix sporadic failures in test_weakset.
files:
Lib/_weakrefset.py | 2 ++
Lib/test/test_weakset.py | 7 ++++++-
2 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/Lib/_weakrefset.py b/Lib/_weakrefset.py
--- a/Lib/_weakrefset.py
+++ b/Lib/_weakrefset.py
@@ -60,6 +60,8 @@
for itemref in self.data:
item = itemref()
if item is not None:
+ # Caveat: the iterator will keep a strong reference to
+ # `item` until it is resumed or closed.
yield item
def __len__(self):
diff --git a/Lib/test/test_weakset.py b/Lib/test/test_weakset.py
--- a/Lib/test/test_weakset.py
+++ b/Lib/test/test_weakset.py
@@ -473,9 +473,14 @@
def testcontext():
try:
it = iter(s)
- next(it)
+ # Start iterator
+ yielded = ustr(str(next(it)))
# Schedule an item for removal and recreate it
u = ustr(str(items.pop()))
+ if yielded == u:
+ # The iterator still has a reference to the removed item,
+ # advance it (issue #20006).
+ next(it)
gc.collect() # just in case
yield u
finally:
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list