[Python-checkins] python/dist/src/Modules cPickle.c,2.142,2.143
jhylton@users.sourceforge.net
jhylton@users.sourceforge.net
Wed, 09 Apr 2003 14:05:17 -0700
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv10315
Modified Files:
cPickle.c
Log Message:
Make Picklers collectable.
Bug fix candidate.
Index: cPickle.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/cPickle.c,v
retrieving revision 2.142
retrieving revision 2.143
diff -C2 -d -r2.142 -r2.143
*** cPickle.c 20 Mar 2003 20:53:30 -0000 2.142
--- cPickle.c 9 Apr 2003 21:05:12 -0000 2.143
***************
*** 2725,2729 ****
}
! self = PyObject_New(Picklerobject, &Picklertype);
if (self == NULL)
return NULL;
--- 2725,2729 ----
}
! self = PyObject_GC_New(Picklerobject, &Picklertype);
if (self == NULL)
return NULL;
***************
*** 2808,2811 ****
--- 2808,2812 ----
Py_INCREF(dispatch_table);
}
+ PyObject_GC_Track(self);
return self;
***************
*** 2843,2846 ****
--- 2844,2848 ----
Pickler_dealloc(Picklerobject *self)
{
+ PyObject_GC_UnTrack(self);
Py_XDECREF(self->write);
Py_XDECREF(self->memo);
***************
*** 2852,2856 ****
Py_XDECREF(self->dispatch_table);
PyMem_Free(self->write_buf);
! PyObject_Del(self);
}
--- 2854,2896 ----
Py_XDECREF(self->dispatch_table);
PyMem_Free(self->write_buf);
! PyObject_GC_Del(self);
! }
!
! static int
! Pickler_traverse(Picklerobject *self, visitproc visit, void *arg)
! {
! int err;
! #define VISIT(SLOT) \
! if (SLOT) { \
! err = visit((PyObject *)(SLOT), arg); \
! if (err) \
! return err; \
! }
! VISIT(self->write);
! VISIT(self->memo);
! VISIT(self->fast_memo);
! VISIT(self->arg);
! VISIT(self->file);
! VISIT(self->pers_func);
! VISIT(self->inst_pers_func);
! VISIT(self->dispatch_table);
! #undef VISIT
! return 0;
! }
!
! static int
! Pickler_clear(Picklerobject *self)
! {
! #define CLEAR(SLOT) Py_XDECREF(SLOT); SLOT = NULL;
! CLEAR(self->write);
! CLEAR(self->memo);
! CLEAR(self->fast_memo);
! CLEAR(self->arg);
! CLEAR(self->file);
! CLEAR(self->pers_func);
! CLEAR(self->inst_pers_func);
! CLEAR(self->dispatch_table);
! #undef CLEAR
! return 0;
}
***************
*** 2968,2975 ****
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
Picklertype__doc__, /* tp_doc */
! 0, /* tp_traverse */
! 0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
--- 3008,3015 ----
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
Picklertype__doc__, /* tp_doc */
! (traverseproc)Pickler_traverse, /* tp_traverse */
! (inquiry)Pickler_clear, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */