Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 22860cd

Browse files
committed
call PyObject_ClearWeakRefs unconditionally
1 parent edd4879 commit 22860cd

31 files changed

+34
-89
lines changed

Modules/_collectionsmodule.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1532,9 +1532,7 @@ deque_dealloc(PyObject *self)
15321532
Py_ssize_t i;
15331533

15341534
PyObject_GC_UnTrack(deque);
1535-
if (deque->weakreflist != NULL) {
1536-
PyObject_ClearWeakRefs(self);
1537-
}
1535+
PyObject_ClearWeakRefs(self);
15381536
if (deque->leftblock != NULL) {
15391537
(void)deque_clear(self);
15401538
assert(deque->leftblock != NULL);

Modules/_elementtree.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,8 +690,7 @@ element_dealloc(PyObject *op)
690690
/* bpo-31095: UnTrack is needed before calling any callbacks */
691691
PyObject_GC_UnTrack(self);
692692

693-
if (self->weakreflist != NULL)
694-
PyObject_ClearWeakRefs(op);
693+
PyObject_ClearWeakRefs(op);
695694

696695
/* element_gc_clear clears all references and deallocates extra
697696
*/

Modules/_functoolsmodule.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,7 @@ partial_dealloc(PyObject *self)
351351
PyTypeObject *tp = Py_TYPE(self);
352352
/* bpo-31095: UnTrack is needed before calling any callbacks */
353353
PyObject_GC_UnTrack(self);
354-
if (partialobject_CAST(self)->weakreflist != NULL) {
355-
PyObject_ClearWeakRefs(self);
356-
}
354+
PyObject_ClearWeakRefs(self);
357355
(void)partial_clear(self);
358356
tp->tp_free(self);
359357
Py_DECREF(tp);
@@ -1621,9 +1619,7 @@ lru_cache_dealloc(PyObject *op)
16211619
PyTypeObject *tp = Py_TYPE(obj);
16221620
/* bpo-31095: UnTrack is needed before calling any callbacks */
16231621
PyObject_GC_UnTrack(obj);
1624-
if (obj->weakreflist != NULL) {
1625-
PyObject_ClearWeakRefs(op);
1626-
}
1622+
PyObject_ClearWeakRefs(op);
16271623

16281624
(void)lru_cache_tp_clear(op);
16291625
tp->tp_free(obj);

Modules/_io/bufferedio.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,7 @@ buffered_dealloc(PyObject *op)
421421
return;
422422
_PyObject_GC_UNTRACK(self);
423423
self->ok = 0;
424-
if (self->weakreflist != NULL)
425-
PyObject_ClearWeakRefs(op);
424+
PyObject_ClearWeakRefs(op);
426425
if (self->buffer) {
427426
PyMem_Free(self->buffer);
428427
self->buffer = NULL;
@@ -2312,8 +2311,7 @@ bufferedrwpair_dealloc(PyObject *op)
23122311
rwpair *self = rwpair_CAST(op);
23132312
PyTypeObject *tp = Py_TYPE(self);
23142313
_PyObject_GC_UNTRACK(self);
2315-
if (self->weakreflist != NULL)
2316-
PyObject_ClearWeakRefs(op);
2314+
PyObject_ClearWeakRefs(op);
23172315
(void)bufferedrwpair_clear(op);
23182316
tp->tp_free(self);
23192317
Py_DECREF(tp);

Modules/_io/bytesio.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -979,8 +979,7 @@ bytesio_dealloc(PyObject *op)
979979
}
980980
Py_CLEAR(self->buf);
981981
Py_CLEAR(self->dict);
982-
if (self->weakreflist != NULL)
983-
PyObject_ClearWeakRefs(op);
982+
PyObject_ClearWeakRefs(op);
984983
tp->tp_free(self);
985984
Py_DECREF(tp);
986985
}

Modules/_io/fileio.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,9 +570,7 @@ fileio_dealloc(PyObject *op)
570570
PyMem_Free(self->stat_atopen);
571571
self->stat_atopen = NULL;
572572
}
573-
if (self->weakreflist != NULL) {
574-
PyObject_ClearWeakRefs(op);
575-
}
573+
PyObject_ClearWeakRefs(op);
576574
(void)fileio_clear(op);
577575

578576
PyTypeObject *tp = Py_TYPE(op);

Modules/_io/iobase.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,7 @@ iobase_dealloc(PyObject *op)
383383
}
384384
PyTypeObject *tp = Py_TYPE(self);
385385
_PyObject_GC_UNTRACK(self);
386-
if (self->weakreflist != NULL)
387-
PyObject_ClearWeakRefs(op);
386+
PyObject_ClearWeakRefs(op);
388387
Py_CLEAR(self->dict);
389388
tp->tp_free(self);
390389
Py_DECREF(tp);

Modules/_io/stringio.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,7 @@ stringio_dealloc(PyObject *op)
638638
}
639639
PyUnicodeWriter_Discard(self->writer);
640640
(void)stringio_clear(op);
641-
if (self->weakreflist != NULL) {
642-
PyObject_ClearWeakRefs(op);
643-
}
641+
PyObject_ClearWeakRefs(op);
644642
tp->tp_free(self);
645643
Py_DECREF(tp);
646644
}

Modules/_io/textio.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,8 +1469,7 @@ textiowrapper_dealloc(PyObject *op)
14691469
return;
14701470
self->ok = 0;
14711471
_PyObject_GC_UNTRACK(self);
1472-
if (self->weakreflist != NULL)
1473-
PyObject_ClearWeakRefs(op);
1472+
PyObject_ClearWeakRefs(op);
14741473
(void)textiowrapper_clear(op);
14751474
tp->tp_free(self);
14761475
Py_DECREF(tp);

Modules/_io/winconsoleio.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,7 @@ winconsoleio_dealloc(PyObject *op)
518518
if (_PyIOBase_finalize(op) < 0)
519519
return;
520520
_PyObject_GC_UNTRACK(self);
521-
if (self->weakreflist != NULL)
522-
PyObject_ClearWeakRefs(op);
521+
PyObject_ClearWeakRefs(op);
523522
Py_CLEAR(self->dict);
524523
tp->tp_free(self);
525524
Py_DECREF(tp);

Modules/_queuemodule.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,7 @@ simplequeue_dealloc(PyObject *op)
221221

222222
PyObject_GC_UnTrack(self);
223223
(void)simplequeue_clear(op);
224-
if (self->weakreflist != NULL) {
225-
PyObject_ClearWeakRefs(op);
226-
}
224+
PyObject_ClearWeakRefs(op);
227225
tp->tp_free(self);
228226
Py_DECREF(tp);
229227
}

Modules/_sqlite/blob.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ blob_dealloc(PyObject *op)
5656

5757
close_blob(self);
5858

59-
if (self->in_weakreflist != NULL) {
60-
PyObject_ClearWeakRefs(op);
61-
}
59+
PyObject_ClearWeakRefs(op);
6260
(void)tp->tp_clear(op);
6361
tp->tp_free(self);
6462
Py_DECREF(tp);

Modules/_sqlite/cursor.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,7 @@ cursor_dealloc(PyObject *op)
185185
pysqlite_Cursor *self = _pysqlite_Cursor_CAST(op);
186186
PyTypeObject *tp = Py_TYPE(self);
187187
PyObject_GC_UnTrack(self);
188-
if (self->in_weakreflist != NULL) {
189-
PyObject_ClearWeakRefs(op);
190-
}
188+
PyObject_ClearWeakRefs(op);
191189
(void)tp->tp_clear(op);
192190
tp->tp_free(self);
193191
Py_DECREF(tp);

Modules/_sre/sre.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -736,10 +736,7 @@ pattern_dealloc(PyObject *self)
736736
{
737737
PyTypeObject *tp = Py_TYPE(self);
738738
PyObject_GC_UnTrack(self);
739-
PatternObject *obj = _PatternObject_CAST(self);
740-
if (obj->weakreflist != NULL) {
741-
PyObject_ClearWeakRefs(self);
742-
}
739+
PyObject_ClearWeakRefs(self);
743740
(void)pattern_clear(self);
744741
tp->tp_free(self);
745742
Py_DECREF(tp);

Modules/_struct.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1794,9 +1794,7 @@ s_dealloc(PyObject *op)
17941794
PyStructObject *s = PyStructObject_CAST(op);
17951795
PyTypeObject *tp = Py_TYPE(s);
17961796
PyObject_GC_UnTrack(s);
1797-
if (s->weakreflist != NULL) {
1798-
PyObject_ClearWeakRefs(op);
1799-
}
1797+
PyObject_ClearWeakRefs(op);
18001798
if (s->s_codes != NULL) {
18011799
PyMem_Free(s->s_codes);
18021800
}

Modules/_testcapi/heaptype.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,8 +1034,7 @@ heapctypewithweakref_dealloc(PyObject *op)
10341034
{
10351035
HeapCTypeWithWeakrefObject *self = (HeapCTypeWithWeakrefObject*)op;
10361036
PyTypeObject *tp = Py_TYPE(self);
1037-
if (self->weakreflist != NULL)
1038-
PyObject_ClearWeakRefs((PyObject *) self);
1037+
PyObject_ClearWeakRefs((PyObject *) self);
10391038
Py_XDECREF(self->weakreflist);
10401039
PyObject_Free(self);
10411040
Py_DECREF(tp);

Modules/_testlimitedcapi/heaptype_relative.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,7 @@ heapctypewithrelativeweakref_dealloc(PyObject* self)
297297
{
298298
PyTypeObject *tp = Py_TYPE(self);
299299
HeapCTypeWithWeakrefStruct *data = PyObject_GetTypeData(self, tp);
300-
if (data->weakreflist != NULL) {
301-
PyObject_ClearWeakRefs(self);
302-
}
300+
PyObject_ClearWeakRefs(self);
303301
Py_XDECREF(data->weakreflist);
304302
PyObject_Free(self);
305303
Py_DECREF(tp);

Modules/_threadmodule.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,9 +1365,7 @@ static void
13651365
localdummy_dealloc(PyObject *op)
13661366
{
13671367
localdummyobject *self = localdummyobject_CAST(op);
1368-
if (self->weakreflist != NULL) {
1369-
PyObject_ClearWeakRefs(op);
1370-
}
1368+
PyObject_ClearWeakRefs(op);
13711369
PyTypeObject *tp = Py_TYPE(self);
13721370
tp->tp_free(self);
13731371
Py_DECREF(tp);
@@ -1537,9 +1535,7 @@ local_dealloc(PyObject *op)
15371535
localobject *self = localobject_CAST(op);
15381536
/* Weakrefs must be invalidated right now, otherwise they can be used
15391537
from code called below, which is very dangerous since Py_REFCNT(self) == 0 */
1540-
if (self->weakreflist != NULL) {
1541-
PyObject_ClearWeakRefs(op);
1542-
}
1538+
PyObject_ClearWeakRefs(op);
15431539
PyObject_GC_UnTrack(self);
15441540
(void)local_clear(op);
15451541
PyTypeObject *tp = Py_TYPE(self);

Modules/_zoneinfo.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,9 +375,7 @@ zoneinfo_dealloc(PyObject *obj_self)
375375
PyTypeObject *tp = Py_TYPE(self);
376376
PyObject_GC_UnTrack(self);
377377

378-
if (self->weakreflist != NULL) {
379-
PyObject_ClearWeakRefs(obj_self);
380-
}
378+
PyObject_ClearWeakRefs(obj_self);
381379

382380
if (self->trans_list_utc != NULL) {
383381
PyMem_Free(self->trans_list_utc);

Modules/arraymodule.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -728,9 +728,7 @@ array_dealloc(PyObject *op)
728728
PyObject_GC_UnTrack(op);
729729

730730
arrayobject *self = arrayobject_CAST(op);
731-
if (self->weakreflist != NULL) {
732-
PyObject_ClearWeakRefs(op);
733-
}
731+
PyObject_ClearWeakRefs(op);
734732
if (self->ob_item != NULL) {
735733
PyMem_Free(self->ob_item);
736734
}

Modules/mmapmodule.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,7 @@ mmap_object_dealloc(PyObject *op)
163163
Py_END_ALLOW_THREADS
164164
#endif /* UNIX */
165165

166-
if (m_obj->weakreflist != NULL)
167-
PyObject_ClearWeakRefs(op);
166+
PyObject_ClearWeakRefs(op);
168167

169168
tp->tp_free(m_obj);
170169
Py_DECREF(tp);

Objects/classobject.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,7 @@ method_dealloc(PyObject *self)
245245
{
246246
PyMethodObject *im = _PyMethodObject_CAST(self);
247247
_PyObject_GC_UNTRACK(im);
248-
if (im->im_weakreflist != NULL)
249-
PyObject_ClearWeakRefs((PyObject *)im);
248+
PyObject_ClearWeakRefs((PyObject *)im);
250249
Py_DECREF(im->im_func);
251250
Py_XDECREF(im->im_self);
252251
assert(Py_IS_TYPE(self, &PyMethod_Type));

Objects/codeobject.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2436,9 +2436,7 @@ code_dealloc(PyObject *self)
24362436
Py_XDECREF(co->_co_cached->_co_varnames);
24372437
PyMem_Free(co->_co_cached);
24382438
}
2439-
if (co->co_weakreflist != NULL) {
2440-
PyObject_ClearWeakRefs(self);
2441-
}
2439+
PyObject_ClearWeakRefs(self);
24422440
free_monitoring_data(co->_co_monitoring);
24432441
#ifdef Py_GIL_DISABLED
24442442
// The first element always points to the mutable bytecode at the end of

Objects/funcobject.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,9 +1148,7 @@ func_dealloc(PyObject *self)
11481148
return;
11491149
}
11501150
_PyObject_GC_UNTRACK(op);
1151-
if (op->func_weakreflist != NULL) {
1152-
PyObject_ClearWeakRefs((PyObject *) op);
1153-
}
1151+
PyObject_ClearWeakRefs((PyObject *) op);
11541152
(void)func_clear((PyObject*)op);
11551153
// These aren't cleared by func_clear().
11561154
_Py_DECREF_CODE((PyCodeObject *)op->func_code);

Objects/genericaliasobject.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ ga_dealloc(PyObject *self)
3333
gaobject *alias = (gaobject *)self;
3434

3535
_PyObject_GC_UNTRACK(self);
36-
if (alias->weakreflist != NULL) {
37-
PyObject_ClearWeakRefs((PyObject *)alias);
38-
}
36+
PyObject_ClearWeakRefs((PyObject *)alias);
3937
Py_XDECREF(alias->origin);
4038
Py_XDECREF(alias->args);
4139
Py_XDECREF(alias->parameters);

Objects/genobject.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,7 @@ gen_dealloc(PyObject *self)
161161

162162
_PyObject_GC_UNTRACK(gen);
163163

164-
if (gen->gi_weakreflist != NULL)
165-
PyObject_ClearWeakRefs(self);
164+
PyObject_ClearWeakRefs(self);
166165

167166
_PyObject_GC_TRACK(self);
168167

Objects/methodobject.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,7 @@ meth_dealloc(PyObject *self)
167167
{
168168
PyCFunctionObject *m = _PyCFunctionObject_CAST(self);
169169
PyObject_GC_UnTrack(m);
170-
if (m->m_weakreflist != NULL) {
171-
PyObject_ClearWeakRefs((PyObject*) m);
172-
}
170+
PyObject_ClearWeakRefs((PyObject*) m);
173171
// We need to access ml_flags here rather than later.
174172
// `m->m_ml` might have the same lifetime
175173
// as `m_self` when it's dynamically allocated.

Objects/odictobject.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,8 +1391,7 @@ odict_dealloc(PyObject *op)
13911391
PyObject_GC_UnTrack(self);
13921392

13931393
Py_XDECREF(self->od_inst_dict);
1394-
if (self->od_weakreflist != NULL)
1395-
PyObject_ClearWeakRefs((PyObject *)self);
1394+
PyObject_ClearWeakRefs((PyObject *)self);
13961395

13971396
_odict_clear_nodes(self);
13981397
PyDict_Type.tp_dealloc((PyObject *)self);

Objects/picklebufobject.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,7 @@ picklebuf_dealloc(PyObject *op)
111111
{
112112
PyPickleBufferObject *self = (PyPickleBufferObject*)op;
113113
PyObject_GC_UnTrack(self);
114-
if (self->weakreflist != NULL)
115-
PyObject_ClearWeakRefs((PyObject *) self);
114+
PyObject_ClearWeakRefs((PyObject *) self);
116115
PyBuffer_Release(&self->view);
117116
Py_TYPE(self)->tp_free((PyObject *) self);
118117
}

Objects/setobject.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -536,8 +536,7 @@ set_dealloc(PyObject *self)
536536

537537
/* bpo-31095: UnTrack is needed before calling any callbacks */
538538
PyObject_GC_UnTrack(so);
539-
if (so->weakreflist != NULL)
540-
PyObject_ClearWeakRefs((PyObject *) so);
539+
PyObject_ClearWeakRefs((PyObject *) so);
541540

542541
for (entry = so->table; used > 0; entry++) {
543542
if (entry->key && entry->key != dummy) {

Objects/unionobject.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ unionobject_dealloc(PyObject *self)
2121
unionobject *alias = (unionobject *)self;
2222

2323
_PyObject_GC_UNTRACK(self);
24-
if (alias->weakreflist != NULL) {
25-
PyObject_ClearWeakRefs((PyObject *)alias);
26-
}
24+
PyObject_ClearWeakRefs((PyObject *)alias);
2725

2826
Py_XDECREF(alias->args);
2927
Py_XDECREF(alias->hashable_args);

0 commit comments

Comments
 (0)