heck environment closed status before closing a cursors. Fixes #763928.
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index 227fe7b..990c89f 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -774,7 +774,14 @@
     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;