Patches by AMK to check that the db is still open.
diff --git a/Modules/bsddbmodule.c b/Modules/bsddbmodule.c
index 203180f..0c9915a 100644
--- a/Modules/bsddbmodule.c
+++ b/Modules/bsddbmodule.c
@@ -58,6 +58,9 @@
 staticforward PyTypeObject Bsddbtype;
 
 #define is_bsddbobject(v) ((v)->ob_type == &Bsddbtype)
+#define check_bsddbobject_open(v) if ((v)->di_bsddb == NULL) \
+               { PyErr_SetString(BsddbError, "BSDDB object has already been closed"); \
+                 return NULL; }
 
 static PyObject *BsddbError;
 
@@ -206,6 +209,10 @@
 bsddb_length(dp)
 	bsddbobject *dp;
 {
+        if (dp->di_bsddb == NULL) {
+                 PyErr_SetString(BsddbError, "BSDDB object has already been closed"); 
+                 return -1; 
+        }
 	if (dp->di_size < 0) {
 		DBT krec, drec;
 		int status;
@@ -237,6 +244,8 @@
 
 	if (!PyArg_Parse(key, "s#", &data, &size))
 		return NULL;
+        check_bsddbobject_open(dp);
+	
 	krec.data = data;
 	krec.size = size;
 
@@ -267,6 +276,10 @@
 				"bsddb key type must be string");
 		return -1;
 	}
+        if (dp->di_bsddb == NULL) {
+                 PyErr_SetString(BsddbError, "BSDDB object has already been closed"); 
+                 return -1; 
+        }
 	krec.data = data;
 	krec.size = size;
 	dp->di_size = -1;
@@ -341,6 +354,7 @@
 
 	if (!PyArg_NoArgs(args))
 		return NULL;
+	check_bsddbobject_open(dp);
 	list = PyList_New(0);
 	if (list == NULL)
 		return NULL;
@@ -383,6 +397,7 @@
 
 	if (!PyArg_Parse(args, "s#", &data, &size))
 		return NULL;
+	check_bsddbobject_open(dp);
 	krec.data = data;
 	krec.size = size;
 
@@ -407,6 +422,7 @@
 
 	if (!PyArg_Parse(key, "s#", &data, &size))
 		return NULL;
+	check_bsddbobject_open(dp);
 	krec.data = data;
 	krec.size = size;
 
@@ -435,6 +451,7 @@
 	if (!PyArg_NoArgs(args))
 		return NULL;
 
+	check_bsddbobject_open(dp);
 	krec.data = 0;
 	krec.size = 0;
 
@@ -487,6 +504,9 @@
 {
 	int status;
 
+	if (!PyArg_NoArgs(args))
+		return NULL;
+	check_bsddbobject_open(dp);
 	status = (dp->di_bsddb->sync)(dp->di_bsddb, 0);
 	if (status != 0) {
 		PyErr_SetFromErrno(BsddbError);