From 07aec08a0134318a5ee087e61f5afbb213f77d93 Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Fri, 24 Aug 2007 05:32:10 +0000 Subject: reapply of r57378 to fix bug 1725856 --- Lib/bsddb/__init__.py | 4 ++++ Lib/test/test_bsddb.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/Lib/bsddb/__init__.py b/Lib/bsddb/__init__.py index df50bce..26e41b1 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 2da40453..dfee3dc 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'])) -- cgit v0.12