@@ -1653,25 +1653,25 @@ typedef struct {
16531653Py_LOCAL_INLINE (void )
16541654sortslice_copy (sortslice * s1 , Py_ssize_t i , sortslice * s2 , Py_ssize_t j )
16551655{
1656- s1 -> keys [i ] = s2 -> keys [j ];
1656+ FT_ATOMIC_STORE_PTR_RELEASE ( s1 -> keys [i ], s2 -> keys [j ]) ;
16571657 if (s1 -> values != NULL )
1658- s1 -> values [i ] = s2 -> values [j ];
1658+ FT_ATOMIC_STORE_PTR_RELEASE ( s1 -> values [i ], s2 -> values [j ]) ;
16591659}
16601660
16611661Py_LOCAL_INLINE (void )
16621662sortslice_copy_incr (sortslice * dst , sortslice * src )
16631663{
1664- * dst -> keys ++ = * src -> keys ++ ;
1664+ FT_ATOMIC_STORE_PTR_RELEASE ( * dst -> keys ++ , * src -> keys ++ ) ;
16651665 if (dst -> values != NULL )
1666- * dst -> values ++ = * src -> values ++ ;
1666+ FT_ATOMIC_STORE_PTR_RELEASE ( * dst -> values ++ , * src -> values ++ ) ;
16671667}
16681668
16691669Py_LOCAL_INLINE (void )
16701670sortslice_copy_decr (sortslice * dst , sortslice * src )
16711671{
1672- * dst -> keys -- = * src -> keys -- ;
1672+ FT_ATOMIC_STORE_PTR_RELEASE ( * dst -> keys -- , * src -> keys -- ) ;
16731673 if (dst -> values != NULL )
1674- * dst -> values -- = * src -> values -- ;
1674+ FT_ATOMIC_STORE_PTR_RELEASE ( * dst -> values -- , * src -> values -- ) ;
16751675}
16761676
16771677
@@ -1855,22 +1855,22 @@ binarysort(MergeState *ms, const sortslice *ss, Py_ssize_t n, Py_ssize_t ok)
18551855 for (M = ok - 1 ; M >= 0 ; -- M ) {
18561856 k = ISLT (pivot , a [M ]);
18571857 if (k < 0 ) {
1858- a [M + 1 ] = pivot ;
1858+ FT_ATOMIC_STORE_PTR_RELEASE ( a [M + 1 ], pivot ) ;
18591859 if (has_values )
1860- v [M + 1 ] = vpivot ;
1860+ FT_ATOMIC_STORE_PTR_RELEASE ( v [M + 1 ], vpivot ) ;
18611861 goto fail ;
18621862 }
18631863 else if (k ) {
1864- a [M + 1 ] = a [M ];
1864+ FT_ATOMIC_STORE_PTR_RELEASE ( a [M + 1 ], a [M ]) ;
18651865 if (has_values )
1866- v [M + 1 ] = v [M ];
1866+ FT_ATOMIC_STORE_PTR_RELEASE ( v [M + 1 ], v [M ]) ;
18671867 }
18681868 else
18691869 break ;
18701870 }
1871- a [M + 1 ] = pivot ;
1871+ FT_ATOMIC_STORE_PTR_RELEASE ( a [M + 1 ], pivot ) ;
18721872 if (has_values )
1873- v [M + 1 ] = vpivot ;
1873+ FT_ATOMIC_STORE_PTR_RELEASE ( v [M + 1 ], vpivot ) ;
18741874 }
18751875#else // binary insertion sort
18761876 Py_ssize_t L , R ;
@@ -1915,13 +1915,13 @@ binarysort(MergeState *ms, const sortslice *ss, Py_ssize_t n, Py_ssize_t ok)
19151915 usually moving many slots. Years later: under Visual Studio 2022,
19161916 memmove seems just slightly slower than doing it "by hand". */
19171917 for (M = ok ; M > L ; -- M )
1918- a [M ] = a [M - 1 ];
1919- a [L ] = pivot ;
1918+ FT_ATOMIC_STORE_PTR_RELEASE ( a [M ], a [M - 1 ]) ;
1919+ FT_ATOMIC_STORE_PTR_RELEASE ( a [L ], pivot ) ;
19201920 if (has_values ) {
19211921 pivot = v [ok ];
19221922 for (M = ok ; M > L ; -- M )
1923- v [M ] = v [M - 1 ];
1924- v [L ] = pivot ;
1923+ FT_ATOMIC_STORE_PTR_RELEASE ( v [M ], v [M - 1 ]) ;
1924+ FT_ATOMIC_STORE_PTR_RELEASE ( v [L ], pivot ) ;
19251925 }
19261926 }
19271927#endif // pick binary or regular insertion sort
0 commit comments