From: Gregory P. Smith Date: Fri, 24 Aug 2007 05:26:15 +0000 (+0000) Subject: backport of r57378 to fix bug 1725856 X-Git-Tag: v2.5.2c1~212 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=838c33268b70c140a38ade92448492a5e796f488;p=python backport of r57378 to fix bug 1725856 --- diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index cf32668862..7eb625cdea 100644 --- a/Lib/bsddb/__init__.py +++ b/Lib/bsddb/__init__.py @@ -274,12 +274,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 474f3da42b..9ec0cd2bca 100755 --- a/Lib/test/test_bsddb.py +++ b/Lib/test/test_bsddb.py @@ -127,6 +127,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([], self.f.items(), "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([], self.f.items(), "expected empty db after test") + def test_set_location(self): self.assertEqual(self.f.set_location('e'), ('e', self.d['e']))