@@ -476,7 +476,7 @@ impl Source {
476
476
dir,
477
477
ticks : None ,
478
478
index : None ,
479
- _guard : None ,
479
+ _capture : PhantomData ,
480
480
}
481
481
}
482
482
}
@@ -566,7 +566,7 @@ struct Ready<H: Borrow<crate::Async<T>>, T> {
566
566
dir : usize ,
567
567
ticks : Option < ( usize , usize ) > ,
568
568
index : Option < usize > ,
569
- _guard : Option < RemoveOnDrop < H , T > > ,
569
+ _capture : PhantomData < fn ( ) -> T > ,
570
570
}
571
571
572
572
impl < H : Borrow < crate :: Async < T > > , T > Unpin for Ready < H , T > { }
@@ -580,7 +580,6 @@ impl<H: Borrow<crate::Async<T>> + Clone, T> Future for Ready<H, T> {
580
580
dir,
581
581
ticks,
582
582
index,
583
- _guard,
584
583
..
585
584
} = & mut * self ;
586
585
@@ -602,12 +601,6 @@ impl<H: Borrow<crate::Async<T>> + Clone, T> Future for Ready<H, T> {
602
601
Some ( i) => i,
603
602
None => {
604
603
let i = state[ * dir] . wakers . insert ( None ) ;
605
- * _guard = Some ( RemoveOnDrop {
606
- handle : handle. clone ( ) ,
607
- dir : * dir,
608
- key : i,
609
- _marker : PhantomData ,
610
- } ) ;
611
604
* index = Some ( i) ;
612
605
* ticks = Some ( ( Reactor :: get ( ) . ticker ( ) , state[ * dir] . tick ) ) ;
613
606
i
@@ -631,20 +624,15 @@ impl<H: Borrow<crate::Async<T>> + Clone, T> Future for Ready<H, T> {
631
624
}
632
625
}
633
626
634
- /// Remove waker when dropped.
635
- struct RemoveOnDrop < H : Borrow < crate :: Async < T > > , T > {
636
- handle : H ,
637
- dir : usize ,
638
- key : usize ,
639
- _marker : PhantomData < fn ( ) -> T > ,
640
- }
641
-
642
- impl < H : Borrow < crate :: Async < T > > , T > Drop for RemoveOnDrop < H , T > {
627
+ impl < H : Borrow < crate :: Async < T > > , T > Drop for Ready < H , T > {
643
628
fn drop ( & mut self ) {
644
- let mut state = self . handle . borrow ( ) . source . state . lock ( ) . unwrap ( ) ;
645
- let wakers = & mut state[ self . dir ] . wakers ;
646
- if wakers. contains ( self . key ) {
647
- wakers. remove ( self . key ) ;
629
+ // Remove our waker when dropped.
630
+ if let Some ( key) = self . index {
631
+ let mut state = self . handle . borrow ( ) . source . state . lock ( ) . unwrap ( ) ;
632
+ let wakers = & mut state[ self . dir ] . wakers ;
633
+ if wakers. contains ( key) {
634
+ wakers. remove ( key) ;
635
+ }
648
636
}
649
637
}
650
638
}
0 commit comments