in src/runtime/thread/continuation.rs [273:313]
fn reusable_continuation_drop() {
let pool = ContinuationPool::new();
let config: Config = Default::default();
let mut c = pool.acquire_inner(config.stack_size);
c.initialize(Box::new(|| {
let _ = 1 + 1;
}));
let r = c.resume();
assert!(r, "continuation only has one step");
drop(c);
assert_eq!(
pool.continuations.borrow().len(),
1,
"continuation should be reusable because the function finished"
);
let mut c = pool.acquire_inner(config.stack_size);
c.initialize(Box::new(|| {
generator::yield_with(ContinuationOutput::Yielded);
let _ = 1 + 1;
}));
let r = c.resume();
assert!(!r, "continuation yields once, shouldn't be finished yet");
drop(c);
assert_eq!(
pool.continuations.borrow().len(),
0,
"continuation should not be reusable because the function wasn't finished"
);
let c = pool.acquire_inner(config.stack_size);
// Check that it's safe for a continuation to outlive the pool
drop(pool);
drop(c);
}