Skip to content

Commit

Permalink
Avoid redundant lookups in the active slab when spawning new tasks (#96)
Browse files Browse the repository at this point in the history
  • Loading branch information
james7132 authored Feb 17, 2024
1 parent 7ffdf5b commit 568a314
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
Expand All @@ -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
Expand Down Expand Up @@ -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)));
Expand All @@ -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
Expand Down

0 comments on commit 568a314

Please sign in to comment.