@@ -120,7 +120,6 @@ typedef enum {
120
120
PyObject *prefix##_result; \
121
121
PyObject *prefix##_source_tb; \
122
122
PyObject *prefix##_cancel_msg; \
123
- PyObject *prefix##_weakreflist; \
124
123
PyObject *prefix##_cancelled_exc; \
125
124
fut_state prefix##_state; \
126
125
/* These bitfields need to be at the end of the struct
@@ -1502,11 +1501,6 @@ static PyMethodDef FutureType_methods[] = {
1502
1501
{NULL , NULL } /* Sentinel */
1503
1502
};
1504
1503
1505
- static PyMemberDef FutureType_members [] = {
1506
- {"__weaklistoffset__" , T_PYSSIZET , offsetof(FutureObj , fut_weakreflist ), READONLY },
1507
- {NULL },
1508
- };
1509
-
1510
1504
#define FUTURE_COMMON_GETSETLIST \
1511
1505
{"_state", (getter)FutureObj_get_state, NULL, NULL}, \
1512
1506
{"_asyncio_future_blocking", (getter)FutureObj_get_blocking, \
@@ -1537,7 +1531,6 @@ static PyType_Slot Future_slots[] = {
1537
1531
{Py_tp_clear , (inquiry )FutureObj_clear },
1538
1532
{Py_tp_iter , (getiterfunc )future_new_iter },
1539
1533
{Py_tp_methods , FutureType_methods },
1540
- {Py_tp_members , FutureType_members },
1541
1534
{Py_tp_getset , FutureType_getsetlist },
1542
1535
{Py_tp_init , (initproc )_asyncio_Future___init__ },
1543
1536
{Py_tp_new , PyType_GenericNew },
@@ -1552,7 +1545,8 @@ static PyType_Spec Future_spec = {
1552
1545
.name = "_asyncio.Future" ,
1553
1546
.basicsize = sizeof (FutureObj ),
1554
1547
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
1555
- Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT ),
1548
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT |
1549
+ Py_TPFLAGS_MANAGED_WEAKREF ),
1556
1550
.slots = Future_slots ,
1557
1551
};
1558
1552
@@ -1569,9 +1563,7 @@ FutureObj_dealloc(PyObject *self)
1569
1563
PyTypeObject * tp = Py_TYPE (fut );
1570
1564
PyObject_GC_UnTrack (self );
1571
1565
1572
- if (fut -> fut_weakreflist != NULL ) {
1573
- PyObject_ClearWeakRefs (self );
1574
- }
1566
+ PyObject_ClearWeakRefs (self );
1575
1567
1576
1568
(void )FutureObj_clear (fut );
1577
1569
tp -> tp_free (fut );
@@ -2642,11 +2634,6 @@ static PyMethodDef TaskType_methods[] = {
2642
2634
{NULL , NULL } /* Sentinel */
2643
2635
};
2644
2636
2645
- static PyMemberDef TaskType_members [] = {
2646
- {"__weaklistoffset__" , T_PYSSIZET , offsetof(TaskObj , task_weakreflist ), READONLY },
2647
- {NULL },
2648
- };
2649
-
2650
2637
static PyGetSetDef TaskType_getsetlist [] = {
2651
2638
FUTURE_COMMON_GETSETLIST
2652
2639
{"_log_destroy_pending" , (getter )TaskObj_get_log_destroy_pending ,
@@ -2665,7 +2652,6 @@ static PyType_Slot Task_slots[] = {
2665
2652
{Py_tp_clear , (inquiry )TaskObj_clear },
2666
2653
{Py_tp_iter , (getiterfunc )future_new_iter },
2667
2654
{Py_tp_methods , TaskType_methods },
2668
- {Py_tp_members , TaskType_members },
2669
2655
{Py_tp_getset , TaskType_getsetlist },
2670
2656
{Py_tp_init , (initproc )_asyncio_Task___init__ },
2671
2657
{Py_tp_new , PyType_GenericNew },
@@ -2680,7 +2666,8 @@ static PyType_Spec Task_spec = {
2680
2666
.name = "_asyncio.Task" ,
2681
2667
.basicsize = sizeof (TaskObj ),
2682
2668
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE |
2683
- Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT ),
2669
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_MANAGED_DICT |
2670
+ Py_TPFLAGS_MANAGED_WEAKREF ),
2684
2671
.slots = Task_slots ,
2685
2672
};
2686
2673
@@ -2697,9 +2684,7 @@ TaskObj_dealloc(PyObject *self)
2697
2684
PyTypeObject * tp = Py_TYPE (task );
2698
2685
PyObject_GC_UnTrack (self );
2699
2686
2700
- if (task -> task_weakreflist != NULL ) {
2701
- PyObject_ClearWeakRefs (self );
2702
- }
2687
+ PyObject_ClearWeakRefs (self );
2703
2688
2704
2689
(void )TaskObj_clear (task );
2705
2690
tp -> tp_free (task );
0 commit comments