static PyObject *
O_close(Oobject *self, PyObject *args) {
- free(self->buf);
+ if (self->buf != NULL)
+ free(self->buf);
+ self->buf = NULL;
self->pos = self->string_size = self->buf_size = 0;
self->closed = 1;
static void
O_dealloc(Oobject *self) {
- free(self->buf);
+ if (self->buf != NULL)
+ free(self->buf);
PyMem_DEL(self);
}
static PyObject *
I_close(Iobject *self, PyObject *args) {
- Py_DECREF(self->pbuf);
+ Py_XDECREF(self->pbuf);
+ self->pbuf = NULL;
self->pos = self->string_size = 0;
self->closed = 1;
static void
I_dealloc(Iobject *self) {
- Py_DECREF(self->pbuf);
+ Py_XDECREF(self->pbuf);
PyMem_DEL(self);
}
/******************************************************************************
$Log$
+ Revision 2.7 1997/09/03 00:09:26 guido
+ Fix the bug Jeremy was experiencing: both the close() and the
+ dealloc() functions contained code to free/DECREF the buffer
+ (there were differences between I and O objects but the logic bug was
+ the same). Fixed this be setting the buffer pointer to NULL and
+ testing for that. (This also makes it safe to call close() more than
+ once.)
+
+ XXX Worry: what if you try to read() or write() once the thing is
+ closed?
+
Revision 2.6 1997/08/13 03:14:41 guido
cPickle release 0.3 from Jim Fulton