File tree Expand file tree Collapse file tree 20 files changed +59
-22
lines changed Expand file tree Collapse file tree 20 files changed +59
-22
lines changed Original file line number Diff line number Diff line change @@ -1532,7 +1532,9 @@ deque_dealloc(PyObject *self)
1532
1532
Py_ssize_t i ;
1533
1533
1534
1534
PyObject_GC_UnTrack (deque );
1535
- PyObject_ClearWeakRefs (self );
1535
+ if (deque -> weakreflist != NULL ) {
1536
+ PyObject_ClearWeakRefs (self );
1537
+ }
1536
1538
if (deque -> leftblock != NULL ) {
1537
1539
(void )deque_clear (self );
1538
1540
assert (deque -> leftblock != NULL );
Original file line number Diff line number Diff line change @@ -690,7 +690,8 @@ element_dealloc(PyObject *op)
690
690
/* bpo-31095: UnTrack is needed before calling any callbacks */
691
691
PyObject_GC_UnTrack (self );
692
692
693
- PyObject_ClearWeakRefs (op );
693
+ if (self -> weakreflist != NULL )
694
+ PyObject_ClearWeakRefs (op );
694
695
695
696
/* element_gc_clear clears all references and deallocates extra
696
697
*/
Original file line number Diff line number Diff line change @@ -351,7 +351,9 @@ partial_dealloc(PyObject *self)
351
351
PyTypeObject * tp = Py_TYPE (self );
352
352
/* bpo-31095: UnTrack is needed before calling any callbacks */
353
353
PyObject_GC_UnTrack (self );
354
- PyObject_ClearWeakRefs (self );
354
+ if (partialobject_CAST (self )-> weakreflist != NULL ) {
355
+ PyObject_ClearWeakRefs (self );
356
+ }
355
357
(void )partial_clear (self );
356
358
tp -> tp_free (self );
357
359
Py_DECREF (tp );
@@ -1619,7 +1621,9 @@ lru_cache_dealloc(PyObject *op)
1619
1621
PyTypeObject * tp = Py_TYPE (obj );
1620
1622
/* bpo-31095: UnTrack is needed before calling any callbacks */
1621
1623
PyObject_GC_UnTrack (obj );
1622
- PyObject_ClearWeakRefs (op );
1624
+ if (obj -> weakreflist != NULL ) {
1625
+ PyObject_ClearWeakRefs (op );
1626
+ }
1623
1627
1624
1628
(void )lru_cache_tp_clear (op );
1625
1629
tp -> tp_free (obj );
Original file line number Diff line number Diff line change @@ -421,7 +421,8 @@ buffered_dealloc(PyObject *op)
421
421
return ;
422
422
_PyObject_GC_UNTRACK (self );
423
423
self -> ok = 0 ;
424
- PyObject_ClearWeakRefs (op );
424
+ if (self -> weakreflist != NULL )
425
+ PyObject_ClearWeakRefs (op );
425
426
if (self -> buffer ) {
426
427
PyMem_Free (self -> buffer );
427
428
self -> buffer = NULL ;
Original file line number Diff line number Diff line change @@ -570,7 +570,9 @@ fileio_dealloc(PyObject *op)
570
570
PyMem_Free (self -> stat_atopen );
571
571
self -> stat_atopen = NULL ;
572
572
}
573
- PyObject_ClearWeakRefs (op );
573
+ if (self -> weakreflist != NULL ) {
574
+ PyObject_ClearWeakRefs (op );
575
+ }
574
576
(void )fileio_clear (op );
575
577
576
578
PyTypeObject * tp = Py_TYPE (op );
Original file line number Diff line number Diff line change @@ -383,7 +383,8 @@ iobase_dealloc(PyObject *op)
383
383
}
384
384
PyTypeObject * tp = Py_TYPE (self );
385
385
_PyObject_GC_UNTRACK (self );
386
- PyObject_ClearWeakRefs (op );
386
+ if (self -> weakreflist != NULL )
387
+ PyObject_ClearWeakRefs (op );
387
388
Py_CLEAR (self -> dict );
388
389
tp -> tp_free (self );
389
390
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -1469,7 +1469,8 @@ textiowrapper_dealloc(PyObject *op)
1469
1469
return ;
1470
1470
self -> ok = 0 ;
1471
1471
_PyObject_GC_UNTRACK (self );
1472
- PyObject_ClearWeakRefs (op );
1472
+ if (self -> weakreflist != NULL )
1473
+ PyObject_ClearWeakRefs (op );
1473
1474
(void )textiowrapper_clear (op );
1474
1475
tp -> tp_free (self );
1475
1476
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -518,7 +518,8 @@ winconsoleio_dealloc(PyObject *op)
518
518
if (_PyIOBase_finalize (op ) < 0 )
519
519
return ;
520
520
_PyObject_GC_UNTRACK (self );
521
- PyObject_ClearWeakRefs (op );
521
+ if (self -> weakreflist != NULL )
522
+ PyObject_ClearWeakRefs (op );
522
523
Py_CLEAR (self -> dict );
523
524
tp -> tp_free (self );
524
525
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -221,7 +221,9 @@ simplequeue_dealloc(PyObject *op)
221
221
222
222
PyObject_GC_UnTrack (self );
223
223
(void )simplequeue_clear (op );
224
- PyObject_ClearWeakRefs (op );
224
+ if (self -> weakreflist != NULL ) {
225
+ PyObject_ClearWeakRefs (op );
226
+ }
225
227
tp -> tp_free (self );
226
228
Py_DECREF (tp );
227
229
}
Original file line number Diff line number Diff line change @@ -56,7 +56,9 @@ blob_dealloc(PyObject *op)
56
56
57
57
close_blob (self );
58
58
59
- PyObject_ClearWeakRefs (op );
59
+ if (self -> in_weakreflist != NULL ) {
60
+ PyObject_ClearWeakRefs (op );
61
+ }
60
62
(void )tp -> tp_clear (op );
61
63
tp -> tp_free (self );
62
64
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -185,7 +185,9 @@ cursor_dealloc(PyObject *op)
185
185
pysqlite_Cursor * self = _pysqlite_Cursor_CAST (op );
186
186
PyTypeObject * tp = Py_TYPE (self );
187
187
PyObject_GC_UnTrack (self );
188
- PyObject_ClearWeakRefs (op );
188
+ if (self -> in_weakreflist != NULL ) {
189
+ PyObject_ClearWeakRefs (op );
190
+ }
189
191
(void )tp -> tp_clear (op );
190
192
tp -> tp_free (self );
191
193
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -736,7 +736,10 @@ pattern_dealloc(PyObject *self)
736
736
{
737
737
PyTypeObject * tp = Py_TYPE (self );
738
738
PyObject_GC_UnTrack (self );
739
- PyObject_ClearWeakRefs (self );
739
+ PatternObject * obj = _PatternObject_CAST (self );
740
+ if (obj -> weakreflist != NULL ) {
741
+ PyObject_ClearWeakRefs (self );
742
+ }
740
743
(void )pattern_clear (self );
741
744
tp -> tp_free (self );
742
745
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -1794,7 +1794,9 @@ s_dealloc(PyObject *op)
1794
1794
PyStructObject * s = PyStructObject_CAST (op );
1795
1795
PyTypeObject * tp = Py_TYPE (s );
1796
1796
PyObject_GC_UnTrack (s );
1797
- PyObject_ClearWeakRefs (op );
1797
+ if (s -> weakreflist != NULL ) {
1798
+ PyObject_ClearWeakRefs (op );
1799
+ }
1798
1800
if (s -> s_codes != NULL ) {
1799
1801
PyMem_Free (s -> s_codes );
1800
1802
}
Original file line number Diff line number Diff line change @@ -1034,7 +1034,8 @@ heapctypewithweakref_dealloc(PyObject *op)
1034
1034
{
1035
1035
HeapCTypeWithWeakrefObject * self = (HeapCTypeWithWeakrefObject * )op ;
1036
1036
PyTypeObject * tp = Py_TYPE (self );
1037
- PyObject_ClearWeakRefs ((PyObject * ) self );
1037
+ if (self -> weakreflist != NULL )
1038
+ PyObject_ClearWeakRefs ((PyObject * ) self );
1038
1039
Py_XDECREF (self -> weakreflist );
1039
1040
PyObject_Free (self );
1040
1041
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -297,7 +297,9 @@ heapctypewithrelativeweakref_dealloc(PyObject* self)
297
297
{
298
298
PyTypeObject * tp = Py_TYPE (self );
299
299
HeapCTypeWithWeakrefStruct * data = PyObject_GetTypeData (self , tp );
300
- PyObject_ClearWeakRefs (self );
300
+ if (data -> weakreflist != NULL ) {
301
+ PyObject_ClearWeakRefs (self );
302
+ }
301
303
Py_XDECREF (data -> weakreflist );
302
304
PyObject_Free (self );
303
305
Py_DECREF (tp );
Original file line number Diff line number Diff line change @@ -1365,7 +1365,9 @@ static void
1365
1365
localdummy_dealloc (PyObject * op )
1366
1366
{
1367
1367
localdummyobject * self = localdummyobject_CAST (op );
1368
- PyObject_ClearWeakRefs (op );
1368
+ if (self -> weakreflist != NULL ) {
1369
+ PyObject_ClearWeakRefs (op );
1370
+ }
1369
1371
PyTypeObject * tp = Py_TYPE (self );
1370
1372
tp -> tp_free (self );
1371
1373
Py_DECREF (tp );
@@ -1535,7 +1537,9 @@ local_dealloc(PyObject *op)
1535
1537
localobject * self = localobject_CAST (op );
1536
1538
/* Weakrefs must be invalidated right now, otherwise they can be used
1537
1539
from code called below, which is very dangerous since Py_REFCNT(self) == 0 */
1538
- PyObject_ClearWeakRefs (op );
1540
+ if (self -> weakreflist != NULL ) {
1541
+ PyObject_ClearWeakRefs (op );
1542
+ }
1539
1543
PyObject_GC_UnTrack (self );
1540
1544
(void )local_clear (op );
1541
1545
PyTypeObject * tp = Py_TYPE (self );
Original file line number Diff line number Diff line change @@ -375,7 +375,9 @@ zoneinfo_dealloc(PyObject *obj_self)
375
375
PyTypeObject * tp = Py_TYPE (self );
376
376
PyObject_GC_UnTrack (self );
377
377
378
- PyObject_ClearWeakRefs (obj_self );
378
+ if (self -> weakreflist != NULL ) {
379
+ PyObject_ClearWeakRefs (obj_self );
380
+ }
379
381
380
382
if (self -> trans_list_utc != NULL ) {
381
383
PyMem_Free (self -> trans_list_utc );
Original file line number Diff line number Diff line change @@ -728,7 +728,9 @@ array_dealloc(PyObject *op)
728
728
PyObject_GC_UnTrack (op );
729
729
730
730
arrayobject * self = arrayobject_CAST (op );
731
- PyObject_ClearWeakRefs (op );
731
+ if (self -> weakreflist != NULL ) {
732
+ PyObject_ClearWeakRefs (op );
733
+ }
732
734
if (self -> ob_item != NULL ) {
733
735
PyMem_Free (self -> ob_item );
734
736
}
Original file line number Diff line number Diff line change @@ -1018,7 +1018,8 @@ static int
1018
1018
tee_clear (PyObject * op )
1019
1019
{
1020
1020
teeobject * to = teeobject_CAST (op );
1021
- PyObject_ClearWeakRefs (op );
1021
+ if (to -> weakreflist != NULL )
1022
+ PyObject_ClearWeakRefs (op );
1022
1023
Py_CLEAR (to -> dataobj );
1023
1024
return 0 ;
1024
1025
}
Original file line number Diff line number Diff line change @@ -163,7 +163,8 @@ mmap_object_dealloc(PyObject *op)
163
163
Py_END_ALLOW_THREADS
164
164
#endif /* UNIX */
165
165
166
- PyObject_ClearWeakRefs (op );
166
+ if (m_obj -> weakreflist != NULL )
167
+ PyObject_ClearWeakRefs (op );
167
168
168
169
tp -> tp_free (m_obj );
169
170
Py_DECREF (tp );
You can’t perform that action at this time.
0 commit comments