Patches by AMK to check that the db is still open.
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c
index 6cace28..23ec831 100644
--- a/Modules/gdbmmodule.c
+++ b/Modules/gdbmmodule.c
@@ -57,6 +57,11 @@
 staticforward PyTypeObject Dbmtype;
 
 #define is_dbmobject(v) ((v)->ob_type == &Dbmtype)
+#define check_dbmobject_open(v) if ((v)->di_dbm == NULL) \
+               { PyErr_SetString(DbmError, "GDBM object has already been closed"); \
+                 return NULL; }
+
+
 
 static PyObject *DbmError;
 
@@ -100,6 +105,10 @@
 dbm_length(dp)
 	dbmobject *dp;
 {
+        if (dp->di_dbm == NULL) {
+                 PyErr_SetString(DbmError, "GDBM object has already been closed"); 
+                 return -1; 
+        }
         if ( dp->di_size < 0 ) {
 		datum key,okey;
 		int size;
@@ -151,6 +160,10 @@
 				"gdbm mappings have string indices only");
 		return -1;
 	}
+        if (dp->di_dbm == NULL) {
+                 PyErr_SetString(DbmError, "GDBM object has already been closed"); 
+                 return -1; 
+        }
 	dp->di_size = -1;
 	if (w == NULL) {
 		if ( gdbm_delete(dp->di_dbm, krec) < 0 ) {
@@ -214,6 +227,8 @@
 	if (!PyArg_NoArgs(args))
 		return NULL;
 
+	check_dbmobject_open(dp);
+
 	v = PyList_New(0);
 	if (v == NULL)
 		return NULL;
@@ -250,6 +265,7 @@
 	
 	if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize))
 		return NULL;
+	check_dbmobject_open(dp);
 	return PyInt_FromLong((long) gdbm_exists(dp->di_dbm, key));
 }
 
@@ -263,6 +279,7 @@
 
 	if (!PyArg_NoArgs(args))
 		return NULL;
+	check_dbmobject_open(dp);
 	key = gdbm_firstkey(dp->di_dbm);
 	if (key.dptr) {
 		v = PyString_FromStringAndSize(key.dptr, key.dsize);
@@ -284,6 +301,7 @@
 
 	if (!PyArg_Parse(args, "s#", &key.dptr, &key.dsize))
 		return NULL;
+	check_dbmobject_open(dp);
 	nextkey = gdbm_nextkey(dp->di_dbm, key);
 	if (nextkey.dptr) {
 		v = PyString_FromStringAndSize(nextkey.dptr, nextkey.dsize);
@@ -302,6 +320,7 @@
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
+	check_dbmobject_open(dp);
 	errno = 0;
 	if (gdbm_reorganize(dp->di_dbm) < 0) {
 		if (errno != 0)
@@ -322,6 +341,7 @@
 {
 	if (!PyArg_NoArgs(args))
 		return NULL;
+	check_dbmobject_open(dp);
 	gdbm_sync(dp->di_dbm);
 	Py_INCREF(Py_None);
 	return Py_None;