Skip to content

Commit 72c3d2e

Browse files
GH-104787: use managed dict in _asyncio (#104795)
1 parent 10c4583 commit 72c3d2e

File tree

1 file changed

+5
-9
lines changed

1 file changed

+5
-9
lines changed

Modules/_asynciomodule.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ typedef enum {
122122
fut_state prefix##_state; \
123123
int prefix##_log_tb; \
124124
int prefix##_blocking; \
125-
PyObject *dict; \
126125
PyObject *prefix##_weakreflist; \
127126
PyObject *prefix##_cancelled_exc;
128127

@@ -489,7 +488,6 @@ future_init(FutureObj *fut, PyObject *loop)
489488
PyObject *res;
490489
int is_true;
491490

492-
// Same to FutureObj_clear() but not clearing fut->dict
493491
Py_CLEAR(fut->fut_loop);
494492
Py_CLEAR(fut->fut_callback0);
495493
Py_CLEAR(fut->fut_context0);
@@ -814,7 +812,7 @@ FutureObj_clear(FutureObj *fut)
814812
Py_CLEAR(fut->fut_source_tb);
815813
Py_CLEAR(fut->fut_cancel_msg);
816814
Py_CLEAR(fut->fut_cancelled_exc);
817-
Py_CLEAR(fut->dict);
815+
_PyObject_ClearManagedDict((PyObject *)fut);
818816
return 0;
819817
}
820818

@@ -832,7 +830,7 @@ FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg)
832830
Py_VISIT(fut->fut_source_tb);
833831
Py_VISIT(fut->fut_cancel_msg);
834832
Py_VISIT(fut->fut_cancelled_exc);
835-
Py_VISIT(fut->dict);
833+
_PyObject_VisitManagedDict((PyObject *)fut, visit, arg);
836834
return 0;
837835
}
838836

@@ -1502,7 +1500,6 @@ static PyMethodDef FutureType_methods[] = {
15021500

15031501
static PyMemberDef FutureType_members[] = {
15041502
{"__weaklistoffset__", T_PYSSIZET, offsetof(FutureObj, fut_weakreflist), READONLY},
1505-
{"__dictoffset__", T_PYSSIZET, offsetof(FutureObj, dict), READONLY},
15061503
{NULL},
15071504
};
15081505

@@ -1551,7 +1548,7 @@ static PyType_Spec Future_spec = {
15511548
.name = "_asyncio.Future",
15521549
.basicsize = sizeof(FutureObj),
15531550
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
1554-
Py_TPFLAGS_IMMUTABLETYPE),
1551+
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT),
15551552
.slots = Future_slots,
15561553
};
15571554

@@ -2183,7 +2180,7 @@ TaskObj_traverse(TaskObj *task, visitproc visit, void *arg)
21832180
Py_VISIT(fut->fut_source_tb);
21842181
Py_VISIT(fut->fut_cancel_msg);
21852182
Py_VISIT(fut->fut_cancelled_exc);
2186-
Py_VISIT(fut->dict);
2183+
_PyObject_VisitManagedDict((PyObject *)fut, visit, arg);
21872184
return 0;
21882185
}
21892186

@@ -2640,7 +2637,6 @@ static PyMethodDef TaskType_methods[] = {
26402637

26412638
static PyMemberDef TaskType_members[] = {
26422639
{"__weaklistoffset__", T_PYSSIZET, offsetof(TaskObj, task_weakreflist), READONLY},
2643-
{"__dictoffset__", T_PYSSIZET, offsetof(TaskObj, dict), READONLY},
26442640
{NULL},
26452641
};
26462642

@@ -2677,7 +2673,7 @@ static PyType_Spec Task_spec = {
26772673
.name = "_asyncio.Task",
26782674
.basicsize = sizeof(TaskObj),
26792675
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
2680-
Py_TPFLAGS_IMMUTABLETYPE),
2676+
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT),
26812677
.slots = Task_slots,
26822678
};
26832679

0 commit comments

Comments
 (0)