Message364384
> We should do that for each singletons:
>
> * None (Py_None)
> * True (Py_True)
> * False (Py_False)
> * Ellipsis (Py_Ellipsis)
Aren't there a couple more lurking in the interpreter? E.g. empty tuple, empty frozenset.
> That is exactly why I didn't propose a change to them.
> The singletons still are refcounted as usual,
> just that their ob_refcnt is ignored.
> If they somehow reach 0, they just "resurrect" themselves
> and ignore the regular collection behavior.
That seems like a very good idea! They don't even need to "resurrect" themselves--we just ensure tp_dealloc is a no-op for those special values. If we do that, different threads and different interpreters can change ob_refcnt willy-nilly, there can be unsafe races between threads, the value could no longer make any sense--but as long as we never free the object, it's all totally fine.
(Actually: tp_dealloc shouldn't be a no-op--it should add a million to the reference count for these special objects, to forestall future irrelevant calls to tp_dealloc.)
This might have minor deleterious effects, e.g. sys.getrefcount() would return misleading results for such objects. I think that's acceptable. |
|
Date |
User |
Action |
Args |
2020-03-17 02:35:49 | larry | set | recipients:
+ larry, rhettinger, ncoghlan, vstinner, jkloth, phsilva, jeremy.kloth, eric.snow, maciej.szulik, nanjekyejoannah, shihai1991 |
2020-03-17 02:35:49 | larry | set | messageid: <1584412549.18.0.128167076611.issue39511@roundup.psfhosted.org> |
2020-03-17 02:35:49 | larry | link | issue39511 messages |
2020-03-17 02:35:48 | larry | create | |
|