Index: Modules/_bsddb.c =================================================================== --- Modules/_bsddb.c (revision 42085) +++ Modules/_bsddb.c (working copy) @@ -912,7 +912,7 @@ } #endif - if (self->db_env) { + if (self->db_env && !self->closed) { MYDB_BEGIN_ALLOW_THREADS; self->db_env->close(self->db_env, 0); MYDB_END_ALLOW_THREADS; @@ -3176,7 +3176,7 @@ else pkeyObj = PyString_FromStringAndSize(pkey.data, pkey.size); - if (flags & DB_SET_RECNO) /* return key, pkey and data */ + if (key.data && key.size) /* return key, pkey and data */ { PyObject *keyObj; int type = _DB_get_type(self->mydb); @@ -3184,12 +3184,12 @@ keyObj = PyInt_FromLong(*(int *)key.data); else keyObj = PyString_FromStringAndSize(key.data, key.size); - retval = Py_BuildValue("OOO", keyObj, pkeyObj, dataObj); + retval = PyTuple_Pack(3, keyObj, pkeyObj, dataObj); FREE_DBT(key); } else /* return just the pkey and data */ { - retval = Py_BuildValue("OO", pkeyObj, dataObj); + retval = PyTuple_Pack(2, pkeyObj, dataObj); } FREE_DBT(pkey); FREE_DBT(data); @@ -5034,6 +5034,8 @@ /* Create the module and add the functions */ m = Py_InitModule(_bsddbModuleName, bsddb_methods); + if (m == NULL) + return; /* Add some symbolic constants to the module */ d = PyModule_GetDict(m);