Index: Modules/bz2module.c =================================================================== --- Modules/bz2module.c (revision 51128) +++ Modules/bz2module.c (working copy) @@ -861,6 +861,20 @@ int bzerror; ACQUIRE_LOCK(self); + switch (self->mode) { + case MODE_WRITE: + break; + + case MODE_CLOSED: + PyErr_SetString(PyExc_ValueError, + "I/O operation on closed file"); + goto cleanup; + + default: + PyErr_SetString(PyExc_IOError, + "file is not ready for writing"); + goto cleanup; + } islist = PyList_Check(seq); if (!islist) { iter = PyObject_GetIter(seq); @@ -951,8 +965,12 @@ Py_INCREF(Py_None); ret = Py_None; - error: +cleanup: RELEASE_LOCK(self); + return ret; + +error: + RELEASE_LOCK(self); Py_XDECREF(list); Py_XDECREF(iter); return ret;