[Python-checkins] python/dist/src/Modules cPickle.c,2.143,2.144
jhylton@users.sourceforge.net
jhylton@users.sourceforge.net
Wed, 09 Apr 2003 14:25:34 -0700
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv18000
Modified Files:
cPickle.c
Log Message:
Make Unpickler objects colletable.
Bugfix candidate.
Index: cPickle.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/cPickle.c,v
retrieving revision 2.143
retrieving revision 2.144
diff -C2 -d -r2.143 -r2.144
*** cPickle.c 9 Apr 2003 21:05:12 -0000 2.143
--- cPickle.c 9 Apr 2003 21:25:30 -0000 2.144
***************
*** 5118,5122 ****
Unpicklerobject *self;
! if (!( self = PyObject_New(Unpicklerobject, &Unpicklertype)))
return NULL;
--- 5118,5122 ----
Unpicklerobject *self;
! if (!( self = PyObject_GC_New(Unpicklerobject, &Unpicklertype)))
return NULL;
***************
*** 5171,5174 ****
--- 5171,5175 ----
}
}
+ PyObject_GC_Track(self);
return self;
***************
*** 5194,5197 ****
--- 5195,5199 ----
Unpickler_dealloc(Unpicklerobject *self)
{
+ PyObject_GC_UnTrack((PyObject *)self);
Py_XDECREF(self->readline);
Py_XDECREF(self->read);
***************
*** 5211,5217 ****
}
! PyObject_Del(self);
}
static PyObject *
--- 5213,5257 ----
}
! PyObject_GC_Del(self);
! }
!
! static int
! Unpickler_traverse(Unpicklerobject *self, visitproc visit, void *arg)
! {
! int err;
!
! #define VISIT(SLOT) \
! if (SLOT) { \
! err = visit((PyObject *)(SLOT), arg); \
! if (err) \
! return err; \
! }
! VISIT(self->readline);
! VISIT(self->read);
! VISIT(self->file);
! VISIT(self->memo);
! VISIT(self->stack);
! VISIT(self->pers_func);
! VISIT(self->arg);
! VISIT(self->last_string);
! #undef VISIT
! return 0;
}
+ static int
+ Unpickler_clear(Unpicklerobject *self)
+ {
+ #define CLEAR(SLOT) Py_XDECREF(SLOT); SLOT = NULL
+ CLEAR(self->readline);
+ CLEAR(self->read);
+ CLEAR(self->file);
+ CLEAR(self->memo);
+ CLEAR(self->stack);
+ CLEAR(self->pers_func);
+ CLEAR(self->arg);
+ CLEAR(self->last_string);
+ #undef CLEAR
+ return 0;
+ }
static PyObject *
***************
*** 5411,5435 ****
static PyTypeObject Unpicklertype = {
PyObject_HEAD_INIT(NULL)
! 0, /*ob_size*/
! "cPickle.Unpickler", /*tp_name*/
! sizeof(Unpicklerobject), /*tp_basicsize*/
! 0, /*tp_itemsize*/
! /* methods */
! (destructor)Unpickler_dealloc, /*tp_dealloc*/
! (printfunc)0, /*tp_print*/
! (getattrfunc)Unpickler_getattr, /*tp_getattr*/
! (setattrfunc)Unpickler_setattr, /*tp_setattr*/
! (cmpfunc)0, /*tp_compare*/
! (reprfunc)0, /*tp_repr*/
! 0, /*tp_as_number*/
! 0, /*tp_as_sequence*/
! 0, /*tp_as_mapping*/
! (hashfunc)0, /*tp_hash*/
! (ternaryfunc)0, /*tp_call*/
! (reprfunc)0, /*tp_str*/
!
! /* Space for future expansion */
! 0L,0L,0L,0L,
! Unpicklertype__doc__ /* Documentation string */
};
--- 5451,5477 ----
static PyTypeObject Unpicklertype = {
PyObject_HEAD_INIT(NULL)
! 0, /*ob_size*/
! "cPickle.Unpickler", /*tp_name*/
! sizeof(Unpicklerobject), /*tp_basicsize*/
! 0,
! (destructor)Unpickler_dealloc, /* tp_dealloc */
! 0, /* tp_print */
! (getattrfunc)Unpickler_getattr, /* tp_getattr */
! (setattrfunc)Unpickler_setattr, /* tp_setattr */
! 0, /* tp_compare */
! 0, /* tp_repr */
! 0, /* tp_as_number */
! 0, /* tp_as_sequence */
! 0, /* tp_as_mapping */
! 0, /* tp_hash */
! 0, /* tp_call */
! 0, /* tp_str */
! 0, /* tp_getattro */
! 0, /* tp_setattro */
! 0, /* tp_as_buffer */
! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
! Unpicklertype__doc__, /* tp_doc */
! (traverseproc)Unpickler_traverse, /* tp_traverse */
! (inquiry)Unpickler_clear, /* tp_clear */
};