Skip to content

Commit

Permalink
runtime: use OwnedTasks in LocalSet (#3950)
Browse files Browse the repository at this point in the history
  • Loading branch information
Darksonn authored Jul 12, 2021
1 parent 3fd88da commit 6610ba9
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 9 deletions.
2 changes: 1 addition & 1 deletion tokio/src/runtime/task/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ mod join;
pub use self::join::JoinHandle;

mod list;
pub(super) use self::list::OwnedTasks;
pub(crate) use self::list::OwnedTasks;

mod raw;
use self::raw::RawTask;
Expand Down
12 changes: 4 additions & 8 deletions tokio/src/task/local.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
//! Runs `!Send` futures on the current thread.
use crate::runtime::task::{self, JoinHandle, Task};
use crate::runtime::task::{self, JoinHandle, OwnedTasks, Task};
use crate::sync::AtomicWaker;
use crate::util::linked_list::{Link, LinkedList};

use std::cell::{Cell, RefCell};
use std::collections::VecDeque;
Expand Down Expand Up @@ -233,7 +232,7 @@ struct Context {

struct Tasks {
/// Collection of all active tasks spawned onto this executor.
owned: LinkedList<Task<Arc<Shared>>, <Task<Arc<Shared>> as Link>::Target>,
owned: OwnedTasks<Arc<Shared>>,

/// Local run queue sender and receiver.
queue: VecDeque<task::Notified<Arc<Shared>>>,
Expand Down Expand Up @@ -334,7 +333,7 @@ impl LocalSet {
tick: Cell::new(0),
context: Context {
tasks: RefCell::new(Tasks {
owned: LinkedList::new(),
owned: OwnedTasks::new(),
queue: VecDeque::with_capacity(INITIAL_CAPACITY),
}),
shared: Arc::new(Shared {
Expand Down Expand Up @@ -682,17 +681,14 @@ impl task::Schedule for Arc<Shared> {
}

fn release(&self, task: &Task<Self>) -> Option<Task<Self>> {
use std::ptr::NonNull;

CURRENT.with(|maybe_cx| {
let cx = maybe_cx.expect("scheduler context missing");

assert!(cx.shared.ptr_eq(self));

let ptr = NonNull::from(task.header());
// safety: task must be contained by list. It is inserted into the
// list in `bind`.
unsafe { cx.tasks.borrow_mut().owned.remove(ptr) }
unsafe { cx.tasks.borrow_mut().owned.remove(&task) }
})
}

Expand Down

0 comments on commit 6610ba9

Please sign in to comment.