File tree 2 files changed +18
-4
lines changed
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 {
145
145
// pointer passed in is valid because we got it from a reference.
146
146
unsafe {
147
147
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
149
151
}
150
152
}
151
153
Original file line number Diff line number Diff line change @@ -185,7 +185,11 @@ impl<T> AtomicPtr<T> {
185
185
// SAFETY: any data races are prevented by disabling interrupts (see
186
186
// module-level comments) and the raw pointer is valid because we got it
187
187
// 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
+ } )
189
193
}
190
194
191
195
#[ inline]
@@ -406,7 +410,11 @@ macro_rules! atomic_int {
406
410
// SAFETY: any data races are prevented by disabling interrupts (see
407
411
// module-level comments) and the raw pointer is valid because we got it
408
412
// 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
+ } )
410
418
}
411
419
412
420
#[ inline]
@@ -685,7 +693,11 @@ macro_rules! atomic_int {
685
693
// SAFETY: any data races are prevented by disabling interrupts (see
686
694
// module-level comments) and the raw pointer is valid because we got it
687
695
// 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
+ } )
689
701
}
690
702
691
703
#[ inline]
You can’t perform that action at this time.
0 commit comments