New submission from Raymond Hettinger <[email protected]>:
In Objects/dictobject.c, if I remove the INCREF/DECREF pair around
PyObject_RichCompareBool(), all the tests still pass:
- Py_INCREF(startkey);
cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
- Py_DECREF(startkey);
It would be nice to have tests demonstrating why it is necessary. IIRC the
reason is that an object could have a custom comparison that clears the
enclosing container and frees the element during the comparison.
Also, it would be nice if PyObject_RichCompareBool() could be redesigned to not
fail if a borrowed reference gets deallocated while the function is running.
The incref and decref occur on a hot path, and it is unfortunate that they
cause extra writes to objects scattered all over memory, likely causing a lot
of cache misses in real programs.
----------
assignee: serhiy.storchaka
components: Interpreter Core
messages: 367997
nosy: rhettinger, serhiy.storchaka
priority: normal
severity: normal
status: open
title: INCREF/DECREFs around the rich comparison needs tests
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue40489>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com