@@ -167,8 +167,8 @@ impl<K: Hash + Eq, Fut> MappedFutures<K, Fut> {
167
167
if let Some ( task) = self . set ( ) . take ( key) {
168
168
unsafe {
169
169
if ( * task. future . get ( ) ) . is_some ( ) {
170
- * task. future . get ( ) = None ;
171
170
self . inner . unlink ( Arc :: as_ptr ( & task. inner ) ) ;
171
+ self . inner . release_task ( task. inner . clone ( ) ) ;
172
172
return true ;
173
173
}
174
174
}
@@ -186,6 +186,7 @@ impl<K: Hash + Eq, Fut> MappedFutures<K, Fut> {
186
186
unsafe {
187
187
let fut = ( * task. future . get ( ) ) . take ( ) . unwrap ( ) ;
188
188
self . inner . unlink ( Arc :: as_ptr ( & task. inner ) ) ;
189
+ self . inner . release_task ( task. inner . clone ( ) ) ;
189
190
return Some ( fut) ;
190
191
}
191
192
}
@@ -311,7 +312,7 @@ impl<K: Hash + Eq, Fut: Future> Stream for MappedFutures<K, Fut> {
311
312
// let key = task.take_key();
312
313
// MappedFutures::set(self.get_mut()).remove(&key);
313
314
MappedFutures :: set ( self . get_mut ( ) ) . remove ( task. key ( ) . unwrap ( ) ) ;
314
- return Poll :: Ready ( Some ( ( task. take_key ( ) , output) ) ) ;
315
+ Poll :: Ready ( Some ( ( task. take_key ( ) , output) ) )
315
316
}
316
317
None => Poll :: Ready ( None ) ,
317
318
}
@@ -450,13 +451,13 @@ pub mod tests {
450
451
#[ test]
451
452
fn mutate ( ) {
452
453
let mut futures: MappedFutures < u32 , Delay > = MappedFutures :: new ( ) ;
453
- insert_millis ( & mut futures, 1 , 50 ) ;
454
- insert_millis ( & mut futures, 2 , 100 ) ;
455
- insert_millis ( & mut futures, 3 , 150 ) ;
456
- insert_millis ( & mut futures, 4 , 200 ) ;
454
+ insert_millis ( & mut futures, 1 , 500 ) ;
455
+ insert_millis ( & mut futures, 2 , 1000 ) ;
456
+ insert_millis ( & mut futures, 3 , 1500 ) ;
457
+ insert_millis ( & mut futures, 4 , 2000 ) ;
457
458
458
459
assert_eq ! ( block_on( futures. next( ) ) . unwrap( ) . 0 , 1 ) ;
459
- futures. get_mut ( & 3 ) . unwrap ( ) . reset ( Duration :: from_millis ( 30 ) ) ;
460
+ futures. get_mut ( & 3 ) . unwrap ( ) . reset ( Duration :: from_millis ( 300 ) ) ;
460
461
assert_eq ! ( block_on( futures. next( ) ) . unwrap( ) . 0 , 3 ) ;
461
462
assert_eq ! ( block_on( futures. next( ) ) . unwrap( ) . 0 , 2 ) ;
462
463
assert_eq ! ( block_on( futures. next( ) ) . unwrap( ) . 0 , 4 ) ;
0 commit comments