@@ -517,6 +517,9 @@ impl<T> Link<T> {
517
517
let old_state = self . state . fetch_or ( REGISTERING , Ordering :: SeqCst ) ;
518
518
if old_state & NOTIFIED != 0 {
519
519
// poll() somehow missed the notification. Wake the event loop and try again.
520
+ let _guard = CallOnDrop ( || {
521
+ self . state . fetch_and ( !REGISTERING , Ordering :: SeqCst ) ;
522
+ } ) ;
520
523
waker. wake_by_ref ( ) ;
521
524
return ;
522
525
}
@@ -624,7 +627,7 @@ impl<T> Slots<T> {
624
627
}
625
628
} ;
626
629
627
- unsafe { slice:: from_raw_parts_mut ( ptr. as_ptr ( ) , size) }
630
+ unsafe { slice:: from_raw_parts ( ptr. as_ptr ( ) , size) }
628
631
}
629
632
}
630
633
@@ -744,6 +747,11 @@ mod tests {
744
747
745
748
type HashSet < K > = hashbrown:: HashSet < K , ahash:: RandomState > ;
746
749
750
+ #[ cfg( not( miri) ) ]
751
+ const MAX : usize = 0xFFFF ;
752
+ #[ cfg( miri) ]
753
+ const MAX : usize = 0xFF ;
754
+
747
755
#[ test]
748
756
fn lock ( ) {
749
757
let lock = Lock :: new ( ( ) ) ;
@@ -760,8 +768,7 @@ mod tests {
760
768
let mut seen_ptrs: HashSet < usize > = HashSet :: with_hasher ( ahash:: RandomState :: default ( ) ) ;
761
769
762
770
// Don't exhaust our memory; only do this many.
763
- let count = 0xFFFF ;
764
- for i in 1 ..count {
771
+ for i in 1 ..MAX {
765
772
let not_yet_seen = seen_ptrs. insert ( slots. get ( i) as * const Link < ( ) > as usize ) ;
766
773
assert ! ( not_yet_seen) ;
767
774
}
@@ -772,7 +779,7 @@ mod tests {
772
779
let index = Indexes :: new ( ) ;
773
780
let mut last = 0 ;
774
781
775
- for _ in 0 ..0xFFFF {
782
+ for _ in 0 ..MAX {
776
783
let val = index. alloc ( ) ;
777
784
assert_eq ! ( val, last + 1 ) ;
778
785
last = val;
0 commit comments