File tree Expand file tree Collapse file tree 2 files changed +18
-4
lines changed
Expand file tree Collapse file tree 2 files changed +18
-4
lines changed Original file line number Diff line number Diff line change @@ -145,7 +145,9 @@ macro_rules! atomic_int {
145145 // pointer passed in is valid because we got it from a reference.
146146 unsafe {
147147 let _guard = lock( self . v. get( ) as usize ) ;
148- self . v. get( ) . replace( val)
148+ let prev = self . v. get( ) . read( ) ;
149+ self . v. get( ) . write( val) ;
150+ prev
149151 }
150152 }
151153
Original file line number Diff line number Diff line change @@ -185,7 +185,11 @@ impl<T> AtomicPtr<T> {
185185 // SAFETY: any data races are prevented by disabling interrupts (see
186186 // module-level comments) and the raw pointer is valid because we got it
187187 // from a reference.
188- with ( || unsafe { self . p . get ( ) . replace ( ptr) } )
188+ with ( || unsafe {
189+ let prev = self . p . get ( ) . read ( ) ;
190+ self . p . get ( ) . write ( ptr) ;
191+ prev
192+ } )
189193 }
190194
191195 #[ inline]
@@ -406,7 +410,11 @@ macro_rules! atomic_int {
406410 // SAFETY: any data races are prevented by disabling interrupts (see
407411 // module-level comments) and the raw pointer is valid because we got it
408412 // from a reference.
409- with( || unsafe { self . v. get( ) . replace( val) } )
413+ with( || unsafe {
414+ let prev = self . v. get( ) . read( ) ;
415+ self . v. get( ) . write( val) ;
416+ prev
417+ } )
410418 }
411419
412420 #[ inline]
@@ -685,7 +693,11 @@ macro_rules! atomic_int {
685693 // SAFETY: any data races are prevented by disabling interrupts (see
686694 // module-level comments) and the raw pointer is valid because we got it
687695 // from a reference.
688- with( || unsafe { self . v. get( ) . replace( val) } )
696+ with( || unsafe {
697+ let prev = self . v. get( ) . read( ) ;
698+ self . v. get( ) . write( val) ;
699+ prev
700+ } )
689701 }
690702
691703 #[ inline]
You can’t perform that action at this time.
0 commit comments