@@ -104,7 +104,8 @@ static int
104104framelocalsproxy_prepare_dedup (PyCodeObject * co , PyObject * * seen )
105105{
106106 * seen = NULL ;
107- if (co -> _co_localsplus_dedup == _PYCODE_LOCALSPLUS_DEDUP_UNIQUE ) {
107+ if (FT_ATOMIC_LOAD_CHAR_RELAXED (co -> _co_localsplus_dedup ) ==
108+ _PYCODE_LOCALSPLUS_DEDUP_UNIQUE ) {
108109 return 0 ;
109110 }
110111 * seen = PyDict_New ();
@@ -126,7 +127,8 @@ framelocalsproxy_visit_name(PyCodeObject *co, int i, PyObject *seen,
126127 return has_value ;
127128 }
128129 if (!has_value &&
129- co -> _co_localsplus_dedup != _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
130+ FT_ATOMIC_LOAD_CHAR_RELAXED (co -> _co_localsplus_dedup ) !=
131+ _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
130132 return 0 ;
131133 }
132134 PyObject * name = PyTuple_GET_ITEM (co -> co_localsplusnames , i );
@@ -141,7 +143,8 @@ framelocalsproxy_visit_name(PyCodeObject *co, int i, PyObject *seen,
141143 return has_value ;
142144 }
143145 else {
144- co -> _co_localsplus_dedup = _PYCODE_LOCALSPLUS_DEDUP_NEEDED ;
146+ FT_ATOMIC_STORE_CHAR_RELAXED (co -> _co_localsplus_dedup ,
147+ _PYCODE_LOCALSPLUS_DEDUP_NEEDED );
145148 if (!has_value || prev == Py_True ) {
146149 return 0 ;
147150 }
@@ -459,8 +462,10 @@ framelocalsproxy_keys(PyObject *self, PyObject *Py_UNUSED(ignored))
459462 }
460463 }
461464 }
462- if (co -> _co_localsplus_dedup == _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
463- co -> _co_localsplus_dedup = _PYCODE_LOCALSPLUS_DEDUP_UNIQUE ;
465+ if (FT_ATOMIC_LOAD_CHAR_RELAXED (co -> _co_localsplus_dedup ) ==
466+ _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
467+ FT_ATOMIC_STORE_CHAR_RELAXED (co -> _co_localsplus_dedup ,
468+ _PYCODE_LOCALSPLUS_DEDUP_UNIQUE );
464469 }
465470 Py_XDECREF (seen );
466471
@@ -687,8 +692,10 @@ framelocalsproxy_values(PyObject *self, PyObject *Py_UNUSED(ignored))
687692 }
688693 Py_XDECREF (value );
689694 }
690- if (co -> _co_localsplus_dedup == _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
691- co -> _co_localsplus_dedup = _PYCODE_LOCALSPLUS_DEDUP_UNIQUE ;
695+ if (FT_ATOMIC_LOAD_CHAR_RELAXED (co -> _co_localsplus_dedup ) ==
696+ _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
697+ FT_ATOMIC_STORE_CHAR_RELAXED (co -> _co_localsplus_dedup ,
698+ _PYCODE_LOCALSPLUS_DEDUP_UNIQUE );
692699 }
693700 Py_XDECREF (seen );
694701
@@ -749,8 +756,10 @@ framelocalsproxy_items(PyObject *self, PyObject *Py_UNUSED(ignored))
749756 goto error ;
750757 }
751758 }
752- if (co -> _co_localsplus_dedup == _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
753- co -> _co_localsplus_dedup = _PYCODE_LOCALSPLUS_DEDUP_UNIQUE ;
759+ if (FT_ATOMIC_LOAD_CHAR_RELAXED (co -> _co_localsplus_dedup ) ==
760+ _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
761+ FT_ATOMIC_STORE_CHAR_RELAXED (co -> _co_localsplus_dedup ,
762+ _PYCODE_LOCALSPLUS_DEDUP_UNIQUE );
754763 }
755764 Py_XDECREF (seen );
756765 seen = NULL ;
@@ -807,8 +816,10 @@ framelocalsproxy_length(PyObject *self)
807816 size ++ ;
808817 }
809818 }
810- if (co -> _co_localsplus_dedup == _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
811- co -> _co_localsplus_dedup = _PYCODE_LOCALSPLUS_DEDUP_UNIQUE ;
819+ if (FT_ATOMIC_LOAD_CHAR_RELAXED (co -> _co_localsplus_dedup ) ==
820+ _PYCODE_LOCALSPLUS_DEDUP_UNKNOWN ) {
821+ FT_ATOMIC_STORE_CHAR_RELAXED (co -> _co_localsplus_dedup ,
822+ _PYCODE_LOCALSPLUS_DEDUP_UNIQUE );
812823 }
813824 Py_XDECREF (seen );
814825 return size ;
0 commit comments