mirror of
https://github.com/tokio-rs/tokio.git
synced 2025-10-01 12:20:39 +00:00
runtime: move impl Schedule for Arc<Handle>
(#7398)
This commit is contained in:
parent
8e999e3806
commit
714e5b571f
@ -1,6 +1,7 @@
|
|||||||
use crate::future::Future;
|
use crate::future::Future;
|
||||||
use crate::loom::sync::Arc;
|
use crate::loom::sync::Arc;
|
||||||
use crate::runtime::scheduler::multi_thread::worker;
|
use crate::runtime::scheduler::multi_thread::worker;
|
||||||
|
use crate::runtime::task::{Notified, Task, TaskHarnessScheduleHooks};
|
||||||
use crate::runtime::{
|
use crate::runtime::{
|
||||||
blocking, driver,
|
blocking, driver,
|
||||||
task::{self, JoinHandle},
|
task::{self, JoinHandle},
|
||||||
@ -66,6 +67,26 @@ impl Handle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl task::Schedule for Arc<Handle> {
|
||||||
|
fn release(&self, task: &Task<Self>) -> Option<Task<Self>> {
|
||||||
|
self.shared.owned.remove(task)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn schedule(&self, task: Notified<Self>) {
|
||||||
|
self.schedule_task(task, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn hooks(&self) -> TaskHarnessScheduleHooks {
|
||||||
|
TaskHarnessScheduleHooks {
|
||||||
|
task_terminate_callback: self.task_hooks.task_terminate_callback.clone(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn yield_now(&self, task: Notified<Self>) {
|
||||||
|
self.schedule_task(task, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cfg_unstable! {
|
cfg_unstable! {
|
||||||
use std::num::NonZeroU64;
|
use std::num::NonZeroU64;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ use crate::runtime::scheduler::multi_thread::{
|
|||||||
idle, queue, Counters, Handle, Idle, Overflow, Parker, Stats, TraceStatus, Unparker,
|
idle, queue, Counters, Handle, Idle, Overflow, Parker, Stats, TraceStatus, Unparker,
|
||||||
};
|
};
|
||||||
use crate::runtime::scheduler::{inject, Defer, Lock};
|
use crate::runtime::scheduler::{inject, Defer, Lock};
|
||||||
use crate::runtime::task::{OwnedTasks, TaskHarnessScheduleHooks};
|
use crate::runtime::task::OwnedTasks;
|
||||||
use crate::runtime::{blocking, driver, scheduler, task, Config, SchedulerMetrics, WorkerMetrics};
|
use crate::runtime::{blocking, driver, scheduler, task, Config, SchedulerMetrics, WorkerMetrics};
|
||||||
use crate::runtime::{context, TaskHooks};
|
use crate::runtime::{context, TaskHooks};
|
||||||
use crate::task::coop;
|
use crate::task::coop;
|
||||||
@ -225,9 +225,6 @@ pub(crate) struct Launch(Vec<Arc<Worker>>);
|
|||||||
/// to stop processing.
|
/// to stop processing.
|
||||||
type RunResult = Result<Box<Core>, ()>;
|
type RunResult = Result<Box<Core>, ()>;
|
||||||
|
|
||||||
/// A task handle
|
|
||||||
type Task = task::Task<Arc<Handle>>;
|
|
||||||
|
|
||||||
/// A notified task handle
|
/// A notified task handle
|
||||||
type Notified = task::Notified<Arc<Handle>>;
|
type Notified = task::Notified<Arc<Handle>>;
|
||||||
|
|
||||||
@ -1048,27 +1045,6 @@ impl Worker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Move `Handle` impls into handle.rs
|
|
||||||
impl task::Schedule for Arc<Handle> {
|
|
||||||
fn release(&self, task: &Task) -> Option<Task> {
|
|
||||||
self.shared.owned.remove(task)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn schedule(&self, task: Notified) {
|
|
||||||
self.schedule_task(task, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn hooks(&self) -> TaskHarnessScheduleHooks {
|
|
||||||
TaskHarnessScheduleHooks {
|
|
||||||
task_terminate_callback: self.task_hooks.task_terminate_callback.clone(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn yield_now(&self, task: Notified) {
|
|
||||||
self.schedule_task(task, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Handle {
|
impl Handle {
|
||||||
pub(super) fn schedule_task(&self, task: Notified, is_yield: bool) {
|
pub(super) fn schedule_task(&self, task: Notified, is_yield: bool) {
|
||||||
with_current(|maybe_cx| {
|
with_current(|maybe_cx| {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user