]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Revert "gh-116946: fully implement GC protocol for `_tkinter.Tk{app,tt}Object` (...
authorPeter Bierma <zintensitydev@gmail.com>
Thu, 11 Sep 2025 21:05:37 +0000 (17:05 -0400)
committerGitHub <noreply@github.com>
Thu, 11 Sep 2025 21:05:37 +0000 (17:05 -0400)
This reverts commit 283380a9417eebf1bf9d3a1e941cef94149712bb.

Modules/_tkinter.c

index f094286063e9f5cce6018c0413b15251a886a0e9..f0882191d3c3e819ddc5d4d296e1e1f5fb3ac75e 100644 (file)
@@ -589,11 +589,10 @@ Tkapp_New(const char *screenName, const char *className,
           int interactive, int wantobjects, int wantTk, int sync,
           const char *use)
 {
-    PyTypeObject *type = (PyTypeObject *)Tkapp_Type;
     TkappObject *v;
     char *argv0;
 
-    v = (TkappObject *)type->tp_alloc(type, 0);
+    v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type);
     if (v == NULL)
         return NULL;
 
@@ -2746,10 +2745,9 @@ _tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self)
 static TkttObject *
 Tktt_New(PyObject *func)
 {
-    PyTypeObject *type = (PyTypeObject *)Tktt_Type;
     TkttObject *v;
 
-    v = (TkttObject *)type->tp_alloc(type, 0);
+    v = PyObject_New(TkttObject, (PyTypeObject *) Tktt_Type);
     if (v == NULL)
         return NULL;
 
@@ -2760,31 +2758,17 @@ Tktt_New(PyObject *func)
     return (TkttObject*)Py_NewRef(v);
 }
 
-static int
-Tktt_Clear(PyObject *op)
-{
-    TkttObject *self = TkttObject_CAST(op);
-    Py_CLEAR(self->func);
-    return 0;
-}
-
 static void
-Tktt_Dealloc(PyObject *op)
+Tktt_Dealloc(PyObject *self)
 {
-    PyTypeObject *tp = Py_TYPE(op);
-    PyObject_GC_UnTrack(op);
-    (void)Tktt_Clear(op);
-    tp->tp_free(op);
-    Py_DECREF(tp);
-}
+    TkttObject *v = TkttObject_CAST(self);
+    PyObject *func = v->func;
+    PyObject *tp = (PyObject *) Py_TYPE(self);
 
-static int
-Tktt_Traverse(PyObject *op, visitproc visit, void *arg)
-{
-    TkttObject *self = TkttObject_CAST(op);
-    Py_VISIT(Py_TYPE(op));
-    Py_VISIT(self->func);
-    return 0;
+    Py_XDECREF(func);
+
+    PyObject_Free(self);
+    Py_DECREF(tp);
 }
 
 static PyObject *
@@ -3077,38 +3061,21 @@ _tkinter_tkapp_willdispatch_impl(TkappObject *self)
 
 /**** Tkapp Type Methods ****/
 
-static int
-Tkapp_Clear(PyObject *op)
-{
-    TkappObject *self = TkappObject_CAST(op);
-    Py_CLEAR(self->trace);
-    return 0;
-}
-
 static void
 Tkapp_Dealloc(PyObject *op)
 {
-    PyTypeObject *tp = Py_TYPE(op);
-    PyObject_GC_UnTrack(op);
     TkappObject *self = TkappObject_CAST(op);
+    PyTypeObject *tp = Py_TYPE(self);
     /*CHECK_TCL_APPARTMENT;*/
     ENTER_TCL
     Tcl_DeleteInterp(Tkapp_Interp(self));
     LEAVE_TCL
-    (void)Tkapp_Clear(op);
-    tp->tp_free(self);
+    Py_XDECREF(self->trace);
+    PyObject_Free(self);
     Py_DECREF(tp);
     DisableEventHook();
 }
 
-static int
-Tkapp_Traverse(PyObject *op, visitproc visit, void *arg)
-{
-    TkappObject *self = TkappObject_CAST(op);
-    Py_VISIT(Py_TYPE(op));
-    Py_VISIT(self->trace);
-    return 0;
-}
 
 
 /**** Tkinter Module ****/
@@ -3296,9 +3263,7 @@ static PyMethodDef Tktt_methods[] =
 };
 
 static PyType_Slot Tktt_Type_slots[] = {
-    {Py_tp_clear, Tktt_Clear},
     {Py_tp_dealloc, Tktt_Dealloc},
-    {Py_tp_traverse, Tktt_Traverse},
     {Py_tp_repr, Tktt_Repr},
     {Py_tp_methods, Tktt_methods},
     {0, 0}
@@ -3311,7 +3276,6 @@ static PyType_Spec Tktt_Type_spec = {
         Py_TPFLAGS_DEFAULT
         | Py_TPFLAGS_DISALLOW_INSTANTIATION
         | Py_TPFLAGS_IMMUTABLETYPE
-        | Py_TPFLAGS_HAVE_GC
     ),
     .slots = Tktt_Type_slots,
 };
@@ -3358,9 +3322,7 @@ static PyMethodDef Tkapp_methods[] =
 };
 
 static PyType_Slot Tkapp_Type_slots[] = {
-    {Py_tp_clear, Tkapp_Clear},
     {Py_tp_dealloc, Tkapp_Dealloc},
-    {Py_tp_traverse, Tkapp_Traverse},
     {Py_tp_methods, Tkapp_methods},
     {0, 0}
 };
@@ -3373,7 +3335,6 @@ static PyType_Spec Tkapp_Type_spec = {
         Py_TPFLAGS_DEFAULT
         | Py_TPFLAGS_DISALLOW_INSTANTIATION
         | Py_TPFLAGS_IMMUTABLETYPE
-        | Py_TPFLAGS_HAVE_GC
     ),
     .slots = Tkapp_Type_slots,
 };