diff options
author | Christian Tismer <tismer@stackless.com> | 2021-05-08 16:06:23 +0200 |
---|---|---|
committer | Cristián Maureira-Fredes <cristian.maureira-fredes@qt.io> | 2022-01-07 14:07:28 +0100 |
commit | 25c47d16007f3f3e49d4dff533c3d7abd011e97e (patch) | |
tree | ca048410ce2359fc8cc725c9564294f61cd70841 | |
parent | 90b23d1efef65b7410452399ca8f30f9215c04c2 (diff) |
py3.10-prep: reset the type cache after feature switching
[ChangeLog][PySide6] Feature switching needs to reset the
internal type cache. This was an omittion that becomes
relevant in Python 3.10 .
When using feature switching in Python 3.10, there were
funny effects where switched and un-switched versions appeared
to co-exist.
It turned out that we were hit by function caching that
is now implemented for the LOAD_ATTR opcode.
It was not known that caching would happen at all for
PySide classes because we don't use Py_TPFLAGS_VALID_VERSION_TAG.
But actually, this flag is used internally by Python to do some
optimizations, and we just have to notify the interpreter of
type changes by PyType_Modified().
Task-number: PYSIDE-1436
Change-Id: Ie8a73f62bd6e9b8156b8ea23626fabd44700158b
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
(cherry picked from commit 3a2b7c6f88bba04d8b7ddb571163d23c15c36a4f)
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | sources/pyside2/libpyside/feature_select.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sources/pyside2/libpyside/feature_select.cpp b/sources/pyside2/libpyside/feature_select.cpp index 6a21d168d..3da7dde38 100644 --- a/sources/pyside2/libpyside/feature_select.cpp +++ b/sources/pyside2/libpyside/feature_select.cpp @@ -405,6 +405,8 @@ static inline PyObject *SelectFeatureSet(PyTypeObject *type) if (!SelectFeatureSetSubtype(sub_type, select_id)) break; } + // PYSIDE-1436: Clear all caches for the type and subtypes. + PyType_Modified(type); } return type->tp_dict; } |