From: Gregory P. Smith Date: Fri, 24 Aug 2007 05:32:10 +0000 (+0000) Subject: reapply of r57378 to fix bug 1725856 X-Git-Tag: v3.0a1~298 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=07aec08a0134318a5ee087e61f5afbb213f77d93;p=python reapply of r57378 to fix bug 1725856 --- diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index df50bce5a3..26e41b1358 100644 --- a/Lib/bsddb/__init__.py +++ b/Lib/bsddb/__init__.py @@ -266,12 +266,16 @@ class _DBWithCursor(_iter_mixin): def first(self): self._checkOpen() + # fix 1725856: don't needlessly try to restore our cursor position + self.saved_dbc_key = None self._checkCursor() rv = _DeadlockWrap(self.dbc.first) return rv def last(self): self._checkOpen() + # fix 1725856: don't needlessly try to restore our cursor position + self.saved_dbc_key = None self._checkCursor() rv = _DeadlockWrap(self.dbc.last) return rv diff --git a/Lib/test/test_bsddb.py b/Lib/test/test_bsddb.py index 2da404538d..dfee3dcb11 100755 --- a/Lib/test/test_bsddb.py +++ b/Lib/test/test_bsddb.py @@ -131,6 +131,22 @@ class TestBSDDB(unittest.TestCase): items.append(self.f.previous()) self.assertSetEquals(items, self.d.items()) + def test_first_while_deleting(self): + # Test for bug 1725856 + self.assert_(len(self.d) >= 2, "test requires >=2 items") + for _ in self.d: + key = self.f.first()[0] + del self.f[key] + self.assertEqual(0, len(self.f), "expected empty db after test") + + def test_last_while_deleting(self): + # Test for bug 1725856's evil twin + self.assert_(len(self.d) >= 2, "test requires >=2 items") + for _ in self.d: + key = self.f.last()[0] + del self.f[key] + self.assertEqual(0, len(self.f), "expected empty db after test") + def test_set_location(self): self.assertEqual(self.f.set_location('e'), ('e', self.d['e']))