Serhiy Storchaka added the comment:
PyDict_SetItem() can trigger destructor which first call
_PyObjectDict_SetItem() which change CACHED_KEYS(tp) and then call
PyDict_SetItem() which call dictresize(). At the end it may be possible that
cached != ((PyDictObject *)dict)->ma_keys and cached != CACHED_KEYS(tp) and
CACHED_KEYS(tp) != ((PyDictObject *)dict)->ma_keys.
Wouldn't be better to just update the cached variable after calling
PyDict_SetItem()?
if (was_shared && (cached = CACHED_KEYS(tp)) != NULL && cached !=
((PyDictObject *)dict)->ma_keys)
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue29438>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com