Skip to content

Commit f96f7c9

Browse files
Revert "gh-116946: fully implement GC protocol for _tkinter.Tk{app,tt}Object (#138331)" (#138807)
This reverts commit 283380a.
1 parent 5bd4bf0 commit f96f7c9

File tree

1 file changed

+13
-52
lines changed

1 file changed

+13
-52
lines changed

Modules/_tkinter.c

Lines changed: 13 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -589,11 +589,10 @@ Tkapp_New(const char *screenName, const char *className,
589589
int interactive, int wantobjects, int wantTk, int sync,
590590
const char *use)
591591
{
592-
PyTypeObject *type = (PyTypeObject *)Tkapp_Type;
593592
TkappObject *v;
594593
char *argv0;
595594

596-
v = (TkappObject *)type->tp_alloc(type, 0);
595+
v = PyObject_New(TkappObject, (PyTypeObject *) Tkapp_Type);
597596
if (v == NULL)
598597
return NULL;
599598

@@ -2746,10 +2745,9 @@ _tkinter_tktimertoken_deletetimerhandler_impl(TkttObject *self)
27462745
static TkttObject *
27472746
Tktt_New(PyObject *func)
27482747
{
2749-
PyTypeObject *type = (PyTypeObject *)Tktt_Type;
27502748
TkttObject *v;
27512749

2752-
v = (TkttObject *)type->tp_alloc(type, 0);
2750+
v = PyObject_New(TkttObject, (PyTypeObject *) Tktt_Type);
27532751
if (v == NULL)
27542752
return NULL;
27552753

@@ -2760,31 +2758,17 @@ Tktt_New(PyObject *func)
27602758
return (TkttObject*)Py_NewRef(v);
27612759
}
27622760

2763-
static int
2764-
Tktt_Clear(PyObject *op)
2765-
{
2766-
TkttObject *self = TkttObject_CAST(op);
2767-
Py_CLEAR(self->func);
2768-
return 0;
2769-
}
2770-
27712761
static void
2772-
Tktt_Dealloc(PyObject *op)
2762+
Tktt_Dealloc(PyObject *self)
27732763
{
2774-
PyTypeObject *tp = Py_TYPE(op);
2775-
PyObject_GC_UnTrack(op);
2776-
(void)Tktt_Clear(op);
2777-
tp->tp_free(op);
2778-
Py_DECREF(tp);
2779-
}
2764+
TkttObject *v = TkttObject_CAST(self);
2765+
PyObject *func = v->func;
2766+
PyObject *tp = (PyObject *) Py_TYPE(self);
27802767

2781-
static int
2782-
Tktt_Traverse(PyObject *op, visitproc visit, void *arg)
2783-
{
2784-
TkttObject *self = TkttObject_CAST(op);
2785-
Py_VISIT(Py_TYPE(op));
2786-
Py_VISIT(self->func);
2787-
return 0;
2768+
Py_XDECREF(func);
2769+
2770+
PyObject_Free(self);
2771+
Py_DECREF(tp);
27882772
}
27892773

27902774
static PyObject *
@@ -3077,38 +3061,21 @@ _tkinter_tkapp_willdispatch_impl(TkappObject *self)
30773061

30783062
/**** Tkapp Type Methods ****/
30793063

3080-
static int
3081-
Tkapp_Clear(PyObject *op)
3082-
{
3083-
TkappObject *self = TkappObject_CAST(op);
3084-
Py_CLEAR(self->trace);
3085-
return 0;
3086-
}
3087-
30883064
static void
30893065
Tkapp_Dealloc(PyObject *op)
30903066
{
3091-
PyTypeObject *tp = Py_TYPE(op);
3092-
PyObject_GC_UnTrack(op);
30933067
TkappObject *self = TkappObject_CAST(op);
3068+
PyTypeObject *tp = Py_TYPE(self);
30943069
/*CHECK_TCL_APPARTMENT;*/
30953070
ENTER_TCL
30963071
Tcl_DeleteInterp(Tkapp_Interp(self));
30973072
LEAVE_TCL
3098-
(void)Tkapp_Clear(op);
3099-
tp->tp_free(self);
3073+
Py_XDECREF(self->trace);
3074+
PyObject_Free(self);
31003075
Py_DECREF(tp);
31013076
DisableEventHook();
31023077
}
31033078

3104-
static int
3105-
Tkapp_Traverse(PyObject *op, visitproc visit, void *arg)
3106-
{
3107-
TkappObject *self = TkappObject_CAST(op);
3108-
Py_VISIT(Py_TYPE(op));
3109-
Py_VISIT(self->trace);
3110-
return 0;
3111-
}
31123079

31133080

31143081
/**** Tkinter Module ****/
@@ -3296,9 +3263,7 @@ static PyMethodDef Tktt_methods[] =
32963263
};
32973264

32983265
static PyType_Slot Tktt_Type_slots[] = {
3299-
{Py_tp_clear, Tktt_Clear},
33003266
{Py_tp_dealloc, Tktt_Dealloc},
3301-
{Py_tp_traverse, Tktt_Traverse},
33023267
{Py_tp_repr, Tktt_Repr},
33033268
{Py_tp_methods, Tktt_methods},
33043269
{0, 0}
@@ -3311,7 +3276,6 @@ static PyType_Spec Tktt_Type_spec = {
33113276
Py_TPFLAGS_DEFAULT
33123277
| Py_TPFLAGS_DISALLOW_INSTANTIATION
33133278
| Py_TPFLAGS_IMMUTABLETYPE
3314-
| Py_TPFLAGS_HAVE_GC
33153279
),
33163280
.slots = Tktt_Type_slots,
33173281
};
@@ -3358,9 +3322,7 @@ static PyMethodDef Tkapp_methods[] =
33583322
};
33593323

33603324
static PyType_Slot Tkapp_Type_slots[] = {
3361-
{Py_tp_clear, Tkapp_Clear},
33623325
{Py_tp_dealloc, Tkapp_Dealloc},
3363-
{Py_tp_traverse, Tkapp_Traverse},
33643326
{Py_tp_methods, Tkapp_methods},
33653327
{0, 0}
33663328
};
@@ -3373,7 +3335,6 @@ static PyType_Spec Tkapp_Type_spec = {
33733335
Py_TPFLAGS_DEFAULT
33743336
| Py_TPFLAGS_DISALLOW_INSTANTIATION
33753337
| Py_TPFLAGS_IMMUTABLETYPE
3376-
| Py_TPFLAGS_HAVE_GC
33773338
),
33783339
.slots = Tkapp_Type_slots,
33793340
};

0 commit comments

Comments
 (0)