From 35c38eaeae8d24fe0098f3942135b3ba28cffe85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Tue, 15 Jul 2003 19:12:54 +0000 Subject: [PATCH] heck environment closed status before closing a cursors. Fixes #763928. --- Modules/_bsddb.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c index 227fe7bdf58..990c89f215b 100644 --- a/Modules/_bsddb.c +++ b/Modules/_bsddb.c @@ -774,7 +774,14 @@ DBCursor_dealloc(DBCursorObject* self) int err; if (self->dbc != NULL) { MYDB_BEGIN_ALLOW_THREADS; - if (self->mydb->db != NULL) + /* If the underlying database has been closed, we don't + need to do anything. If the environment has been closed + we need to leak, as BerkeleyDB will crash trying to access + the environment. There was an exception when the + user closed the environment even though there still was + a database open. */ + if (self->mydb->db && self->mydb->myenvobj && + !self->mydb->myenvobj->closed) err = self->dbc->c_close(self->dbc); self->dbc = NULL; MYDB_END_ALLOW_THREADS;