@@ -122,7 +122,6 @@ typedef enum {
122
122
fut_state prefix##_state; \
123
123
int prefix##_log_tb; \
124
124
int prefix##_blocking; \
125
- PyObject *dict; \
126
125
PyObject *prefix##_weakreflist; \
127
126
PyObject *prefix##_cancelled_exc;
128
127
@@ -489,7 +488,6 @@ future_init(FutureObj *fut, PyObject *loop)
489
488
PyObject * res ;
490
489
int is_true ;
491
490
492
- // Same to FutureObj_clear() but not clearing fut->dict
493
491
Py_CLEAR (fut -> fut_loop );
494
492
Py_CLEAR (fut -> fut_callback0 );
495
493
Py_CLEAR (fut -> fut_context0 );
@@ -814,7 +812,7 @@ FutureObj_clear(FutureObj *fut)
814
812
Py_CLEAR (fut -> fut_source_tb );
815
813
Py_CLEAR (fut -> fut_cancel_msg );
816
814
Py_CLEAR (fut -> fut_cancelled_exc );
817
- Py_CLEAR ( fut -> dict );
815
+ _PyObject_ClearManagedDict (( PyObject * ) fut );
818
816
return 0 ;
819
817
}
820
818
@@ -832,7 +830,7 @@ FutureObj_traverse(FutureObj *fut, visitproc visit, void *arg)
832
830
Py_VISIT (fut -> fut_source_tb );
833
831
Py_VISIT (fut -> fut_cancel_msg );
834
832
Py_VISIT (fut -> fut_cancelled_exc );
835
- Py_VISIT ( fut -> dict );
833
+ _PyObject_VisitManagedDict (( PyObject * ) fut , visit , arg );
836
834
return 0 ;
837
835
}
838
836
@@ -1502,7 +1500,6 @@ static PyMethodDef FutureType_methods[] = {
1502
1500
1503
1501
static PyMemberDef FutureType_members [] = {
1504
1502
{"__weaklistoffset__" , T_PYSSIZET , offsetof(FutureObj , fut_weakreflist ), READONLY },
1505
- {"__dictoffset__" , T_PYSSIZET , offsetof(FutureObj , dict ), READONLY },
1506
1503
{NULL },
1507
1504
};
1508
1505
@@ -1551,7 +1548,7 @@ static PyType_Spec Future_spec = {
1551
1548
.name = "_asyncio.Future" ,
1552
1549
.basicsize = sizeof (FutureObj ),
1553
1550
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
1554
- Py_TPFLAGS_IMMUTABLETYPE ),
1551
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT ),
1555
1552
.slots = Future_slots ,
1556
1553
};
1557
1554
@@ -2183,7 +2180,7 @@ TaskObj_traverse(TaskObj *task, visitproc visit, void *arg)
2183
2180
Py_VISIT (fut -> fut_source_tb );
2184
2181
Py_VISIT (fut -> fut_cancel_msg );
2185
2182
Py_VISIT (fut -> fut_cancelled_exc );
2186
- Py_VISIT ( fut -> dict );
2183
+ _PyObject_VisitManagedDict (( PyObject * ) fut , visit , arg );
2187
2184
return 0 ;
2188
2185
}
2189
2186
@@ -2640,7 +2637,6 @@ static PyMethodDef TaskType_methods[] = {
2640
2637
2641
2638
static PyMemberDef TaskType_members [] = {
2642
2639
{"__weaklistoffset__" , T_PYSSIZET , offsetof(TaskObj , task_weakreflist ), READONLY },
2643
- {"__dictoffset__" , T_PYSSIZET , offsetof(TaskObj , dict ), READONLY },
2644
2640
{NULL },
2645
2641
};
2646
2642
@@ -2677,7 +2673,7 @@ static PyType_Spec Task_spec = {
2677
2673
.name = "_asyncio.Task" ,
2678
2674
.basicsize = sizeof (TaskObj ),
2679
2675
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
2680
- Py_TPFLAGS_IMMUTABLETYPE ),
2676
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT ),
2681
2677
.slots = Task_slots ,
2682
2678
};
2683
2679
0 commit comments