[Python-Dev] test_bsddb hangs with CVS Python

Tim Peters tim.one at comcast.net
Mon Oct 6 10:20:56 EDT 2003


[Jeremy Hylton]
> test_bsddb hangs for me everytime.  This is a current CVS python with
> BerkeleyDB 4.1.25.  I've tried commenting out test_pop and
> test_mapping_iteration_methods, but it still hangs somewhere.

On Win98SE, it hangs every time in test_popitem, which I changed like so:

    def test_popitem(self):
        print [1]                    # ADDED THIS
        k, v = self.f.popitem()
        print [2]                    # AND THIS
        self.assert_(k in self.d)
        self.assert_(v in self.d.values())
        self.assert_(k not in self.f)
        self.assertEqual(len(self.d)-1, len(self.f))

It prints [1], but not [2]:

C:\Code\python\PCbuild>python_d ../lib/test/test_bsddb.py -v
test_change (__main__.TestBTree) ... ok
test_clear (__main__.TestBTree) ... ok
test_close_and_reopen (__main__.TestBTree) ... ok
test_contains (__main__.TestBTree) ... ok
test_first_next_looping (__main__.TestBTree) ... ok
test_get (__main__.TestBTree) ... ok
test_getitem (__main__.TestBTree) ... ok
test_has_key (__main__.TestBTree) ... ok
test_keyordering (__main__.TestBTree) ... ok
test_len (__main__.TestBTree) ... ok
test_mapping_iteration_methods (__main__.TestBTree) ... ok
test_pop (__main__.TestBTree) ... ok
test_popitem (__main__.TestBTree) ... [1]

A stacktrace at the point it's hung; looks like deadlock:

_BSDDB_D! __db_win32_mutex_lock + 134 bytes
_BSDDB_D! __lock_get + 2264 bytes
_BSDDB_D! __lock_get + 197 bytes
_BSDDB_D! __db_lget + 365 bytes
_BSDDB_D! __bam_search + 322 bytes
_BSDDB_D! __bam_c_rget + 3535 bytes
_BSDDB_D! __bam_c_dup + 1251 bytes
_BSDDB_D! __db_c_get + 875 bytes
_BSDDB_D! __db_delete + 378 bytes
_DB_delete(DBObject * 0x00ba1ee8, __db_txn * 0x00000000,
           __db_dbt * 0x0062d9b0, int 0)
          line 545 + 29 bytes
DB_ass_sub(DBObject * 0x00ba1ee8, _object * 0x00881d10,
           _object * 0x00000000)
          line 2343 + 17 bytes
PyObject_DelItem(_object * 0x00ba1ee8, _object * 0x00881d10)
                line 155 + 16 bytes
eval_frame(_frame * 0x0098a368) line 1460 + 13 bytes
PyEval_EvalCodeEx(PyCodeObject * 0x00bb6550, _object * 0x008782d8,
                  _object * 0x00000000, _object * * 0x008f034c,
                  int 2, _object * * 0x00000000, int 0,
                  _object * * 0x00000000, int 0, _object * 0x00000000)
                 line 2663 + 9 bytes
...

eval_frame() is executing DELETE_SUBSCR.


Good(?) news:  test_popitem continues to hang even if all other tests are
commented out:

C:\Code\python\PCbuild>python_d ../lib/test/test_bsddb.py -v
test_popitem (__main__.TestBTree) ... [1]

Same stacktrace at that point.

I was using a debug-build CVS Python above.  It also hangs the same place
using a release-build Python.




More information about the Python-Dev mailing list