Avoid redundant lookups in the active slab when spawning new tasks (#96)

This commit is contained in:
James Liu 2024-02-17 00:02:59 -08:00 committed by GitHub
parent 7ffdf5ba92
commit 568a314ad9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 6 additions and 4 deletions

View File

@ -151,7 +151,8 @@ impl<'a> Executor<'a> {
let mut active = self.state().active.lock().unwrap();
// Remove the task from the set of active tasks when the future finishes.
let index = active.vacant_entry().key();
let entry = active.vacant_entry();
let index = entry.key();
let state = self.state().clone();
let future = async move {
let _guard = CallOnDrop(move || drop(state.active.lock().unwrap().try_remove(index)));
@ -164,7 +165,7 @@ impl<'a> Executor<'a> {
.propagate_panic(true)
.spawn_unchecked(|()| future, self.schedule())
};
active.insert(runnable.waker());
entry.insert(runnable.waker());
runnable.schedule();
task
@ -398,7 +399,8 @@ impl<'a> LocalExecutor<'a> {
let mut active = self.inner().state().active.lock().unwrap();
// Remove the task from the set of active tasks when the future finishes.
let index = active.vacant_entry().key();
let entry = active.vacant_entry();
let index = entry.key();
let state = self.inner().state().clone();
let future = async move {
let _guard = CallOnDrop(move || drop(state.active.lock().unwrap().try_remove(index)));
@ -411,7 +413,7 @@ impl<'a> LocalExecutor<'a> {
.propagate_panic(true)
.spawn_unchecked(|()| future, self.schedule())
};
active.insert(runnable.waker());
entry.insert(runnable.waker());
runnable.schedule();
task