From ac1643783af32d8ca2f7f0afdb5554fb278cc08e Mon Sep 17 00:00:00 2001 From: Markus Westerlind Date: Wed, 6 Nov 2019 22:51:02 +0100 Subject: [PATCH] fix: [Local]SpawnExt should take &self as their base traits Seems like an oversight in https://github.com/rust-lang-nursery/futures-rs/pull/1950 Technically a BREAKING CHANGE --- futures-executor/src/local_pool.rs | 8 ++++---- futures-task/src/spawn.rs | 20 ++++++++++++++++++++ futures-test/src/task/noop_spawner.rs | 2 +- futures-test/src/task/panic_spawner.rs | 2 +- futures-test/src/task/record_spawner.rs | 2 +- futures-util/src/compat/executor.rs | 2 +- futures-util/src/task/spawn.rs | 19 ++++++++----------- futures/tests/eventual.rs | 2 +- futures/tests/mutex.rs | 2 +- 9 files changed, 38 insertions(+), 21 deletions(-) diff --git a/futures-executor/src/local_pool.rs b/futures-executor/src/local_pool.rs index 6c061a5ac3..f547f3ed7b 100644 --- a/futures-executor/src/local_pool.rs +++ b/futures-executor/src/local_pool.rs @@ -60,7 +60,7 @@ impl ArcWake for ThreadNotify { fn run_executor) -> Poll>(mut f: F) -> T { let _enter = enter().expect( "cannot execute `LocalPool` executor from within \ - another executor", + another executor", ); CURRENT_THREAD_NOTIFY.with(|thread_notify| { @@ -78,7 +78,7 @@ fn run_executor) -> Poll>(mut f: F) -> T { fn poll_executor) -> T>(mut f: F) -> T { let _enter = enter().expect( "cannot execute `LocalPool` executor from within \ - another executor", + another executor", ); CURRENT_THREAD_NOTIFY.with(|thread_notify| { @@ -161,7 +161,7 @@ impl LocalPool { /// use futures::future::{ready, pending}; /// /// let mut pool = LocalPool::new(); - /// let mut spawner = pool.spawner(); + /// let spawner = pool.spawner(); /// /// spawner.spawn_local(ready(())).unwrap(); /// spawner.spawn_local(ready(())).unwrap(); @@ -209,7 +209,7 @@ impl LocalPool { /// use futures::future::{ready, pending}; /// /// let mut pool = LocalPool::new(); - /// let mut spawner = pool.spawner(); + /// let spawner = pool.spawner(); /// /// spawner.spawn_local(ready(())).unwrap(); /// spawner.spawn_local(ready(())).unwrap(); diff --git a/futures-task/src/spawn.rs b/futures-task/src/spawn.rs index d59cc454a9..815411da8b 100644 --- a/futures-task/src/spawn.rs +++ b/futures-task/src/spawn.rs @@ -83,6 +83,16 @@ impl SpawnError { } } +impl Spawn for &Sp { + fn spawn_obj(&self, future: FutureObj<'static, ()>) -> Result<(), SpawnError> { + Sp::spawn_obj(self, future) + } + + fn status(&self) -> Result<(), SpawnError> { + Sp::status(self) + } +} + impl Spawn for &mut Sp { fn spawn_obj(&self, future: FutureObj<'static, ()>) -> Result<(), SpawnError> { Sp::spawn_obj(self, future) @@ -103,6 +113,16 @@ impl LocalSpawn for &Sp { } } +impl LocalSpawn for &mut Sp { + fn spawn_local_obj(&self, future: LocalFutureObj<'static, ()>) -> Result<(), SpawnError> { + Sp::spawn_local_obj(self, future) + } + + fn status_local(&self) -> Result<(), SpawnError> { + Sp::status_local(self) + } +} + #[cfg(feature = "alloc")] mod if_alloc { use super::*; diff --git a/futures-test/src/task/noop_spawner.rs b/futures-test/src/task/noop_spawner.rs index 1182828a1e..8967f91ec4 100644 --- a/futures-test/src/task/noop_spawner.rs +++ b/futures-test/src/task/noop_spawner.rs @@ -9,7 +9,7 @@ use futures_task::{FutureObj, Spawn, SpawnError}; /// use futures::task::SpawnExt; /// use futures_test::task::NoopSpawner; /// -/// let mut spawner = NoopSpawner::new(); +/// let spawner = NoopSpawner::new(); /// spawner.spawn(async { }).unwrap(); /// ``` #[derive(Debug)] diff --git a/futures-test/src/task/panic_spawner.rs b/futures-test/src/task/panic_spawner.rs index 87bc931133..e29463df6d 100644 --- a/futures-test/src/task/panic_spawner.rs +++ b/futures-test/src/task/panic_spawner.rs @@ -9,7 +9,7 @@ use futures_task::{FutureObj, Spawn, SpawnError}; /// use futures::task::SpawnExt; /// use futures_test::task::PanicSpawner; /// -/// let mut spawn = PanicSpawner::new(); +/// let spawn = PanicSpawner::new(); /// spawn.spawn(async { })?; // Will panic /// # Ok::<(), Box>(()) /// ``` diff --git a/futures-test/src/task/record_spawner.rs b/futures-test/src/task/record_spawner.rs index d1032f8ef0..59539fa217 100644 --- a/futures-test/src/task/record_spawner.rs +++ b/futures-test/src/task/record_spawner.rs @@ -10,7 +10,7 @@ use std::cell::{Ref, RefCell}; /// use futures::task::SpawnExt; /// use futures_test::task::RecordSpawner; /// -/// let mut recorder = RecordSpawner::new(); +/// let recorder = RecordSpawner::new(); /// recorder.spawn(async { }).unwrap(); /// assert_eq!(recorder.spawned().len(), 1); /// ``` diff --git a/futures-util/src/compat/executor.rs b/futures-util/src/compat/executor.rs index a0c71acd55..e25705be16 100644 --- a/futures-util/src/compat/executor.rs +++ b/futures-util/src/compat/executor.rs @@ -24,7 +24,7 @@ pub trait Executor01CompatExt: Executor01 + Clone + Send + 'st /// /// # let (tx, rx) = futures::channel::oneshot::channel(); /// - /// let mut spawner = DefaultExecutor::current().compat(); + /// let spawner = DefaultExecutor::current().compat(); /// let future03 = async move { /// println!("Running on the pool"); /// spawner.spawn(async { diff --git a/futures-util/src/task/spawn.rs b/futures-util/src/task/spawn.rs index d3296d4ab9..f34445a030 100644 --- a/futures-util/src/task/spawn.rs +++ b/futures-util/src/task/spawn.rs @@ -37,13 +37,13 @@ pub trait SpawnExt: Spawn { /// use futures::executor::ThreadPool; /// use futures::task::SpawnExt; /// - /// let mut executor = ThreadPool::new().unwrap(); + /// let executor = ThreadPool::new().unwrap(); /// /// let future = async { /* ... */ }; /// executor.spawn(future).unwrap(); /// ``` #[cfg(feature = "alloc")] - fn spawn(&mut self, future: Fut) -> Result<(), SpawnError> + fn spawn(&self, future: Fut) -> Result<(), SpawnError> where Fut: Future + Send + 'static, { @@ -62,7 +62,7 @@ pub trait SpawnExt: Spawn { /// use futures::future; /// use futures::task::SpawnExt; /// - /// let mut executor = ThreadPool::new().unwrap(); + /// let executor = ThreadPool::new().unwrap(); /// /// let future = future::ready(1); /// let join_handle_fut = executor.spawn_with_handle(future).unwrap(); @@ -70,10 +70,7 @@ pub trait SpawnExt: Spawn { /// ``` #[cfg(feature = "channel")] #[cfg(feature = "std")] - fn spawn_with_handle( - &mut self, - future: Fut, - ) -> Result, SpawnError> + fn spawn_with_handle(&self, future: Fut) -> Result, SpawnError> where Fut: Future + Send + 'static, Fut::Output: Send, @@ -116,13 +113,13 @@ pub trait LocalSpawnExt: LocalSpawn { /// use futures::task::LocalSpawnExt; /// /// let executor = LocalPool::new(); - /// let mut spawner = executor.spawner(); + /// let spawner = executor.spawner(); /// /// let future = async { /* ... */ }; /// spawner.spawn_local(future).unwrap(); /// ``` #[cfg(feature = "alloc")] - fn spawn_local(&mut self, future: Fut) -> Result<(), SpawnError> + fn spawn_local(&self, future: Fut) -> Result<(), SpawnError> where Fut: Future + 'static, { @@ -141,7 +138,7 @@ pub trait LocalSpawnExt: LocalSpawn { /// use futures::task::LocalSpawnExt; /// /// let mut executor = LocalPool::new(); - /// let mut spawner = executor.spawner(); + /// let spawner = executor.spawner(); /// /// let future = async { 1 }; /// let join_handle_fut = spawner.spawn_local_with_handle(future).unwrap(); @@ -150,7 +147,7 @@ pub trait LocalSpawnExt: LocalSpawn { #[cfg(feature = "channel")] #[cfg(feature = "std")] fn spawn_local_with_handle( - &mut self, + &self, future: Fut, ) -> Result, SpawnError> where diff --git a/futures/tests/eventual.rs b/futures/tests/eventual.rs index 12b26aafa5..bff000dd09 100644 --- a/futures/tests/eventual.rs +++ b/futures/tests/eventual.rs @@ -6,7 +6,7 @@ use std::sync::mpsc; use std::thread; fn run(future: F) { - let mut tp = ThreadPool::new().unwrap(); + let tp = ThreadPool::new().unwrap(); tp.spawn(future.map(drop)).unwrap(); } diff --git a/futures/tests/mutex.rs b/futures/tests/mutex.rs index 11640cceea..2b33f62817 100644 --- a/futures/tests/mutex.rs +++ b/futures/tests/mutex.rs @@ -37,7 +37,7 @@ fn mutex_wakes_waiters() { #[test] fn mutex_contested() { let (tx, mut rx) = mpsc::unbounded(); - let mut pool = futures::executor::ThreadPool::builder().pool_size(16).create().unwrap(); + let pool = futures::executor::ThreadPool::builder().pool_size(16).create().unwrap(); let tx = Arc::new(tx); let mutex = Arc::new(Mutex::new(0));