Skip to content

Commit 1e0baad

Browse files
committed
Use futures_task::ArcWake again now that it's fixed
Avoids one unnecessary atomic operation per wake. Fixes #133
1 parent b78f952 commit 1e0baad

File tree

3 files changed

+24
-25
lines changed

3 files changed

+24
-25
lines changed

Cargo.lock.msrv

Lines changed: 15 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ features = ["async-std-runtime", "tokio-runtime", "gio-runtime", "async-tls", "a
3939
[dependencies]
4040
log = "0.4"
4141
futures-core = { version = "0.3", default-features = false }
42+
futures-task = { version = "0.3.31", default-features = false }
4243
atomic-waker = { version = "1.1", default-features = false }
4344
futures-io = { version = "0.3", default-features = false, features = ["std"] }
4445
pin-project-lite = "0.2"

src/compat.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
use log::*;
33
use std::io::{Read, Write};
44
use std::pin::Pin;
5-
use std::task::{Context, Poll, Wake, Waker};
5+
use std::task::{Context, Poll, Waker};
66

77
use atomic_waker::AtomicWaker;
88
use futures_io::{AsyncRead, AsyncWrite};
9+
use futures_task::{waker_ref, ArcWake};
910
use std::sync::Arc;
1011
use tungstenite::Error as WsError;
1112

@@ -109,14 +110,10 @@ struct WakerProxy {
109110
write_waker: AtomicWaker,
110111
}
111112

112-
impl Wake for WakerProxy {
113-
fn wake(self: Arc<Self>) {
114-
self.wake_by_ref()
115-
}
116-
117-
fn wake_by_ref(self: &Arc<Self>) {
118-
self.read_waker.wake();
119-
self.write_waker.wake();
113+
impl ArcWake for WakerProxy {
114+
fn wake_by_ref(arc_self: &Arc<Self>) {
115+
arc_self.read_waker.wake();
116+
arc_self.write_waker.wake();
120117
}
121118
}
122119

@@ -131,8 +128,8 @@ where
131128
#[cfg(feature = "verbose-logging")]
132129
trace!("{}:{} AllowStd.with_context", file!(), line!());
133130
let waker = match kind {
134-
ContextWaker::Read => Waker::from(self.read_waker_proxy.clone()),
135-
ContextWaker::Write => Waker::from(self.write_waker_proxy.clone()),
131+
ContextWaker::Read => waker_ref(&self.read_waker_proxy),
132+
ContextWaker::Write => waker_ref(&self.write_waker_proxy),
136133
};
137134
let mut context = Context::from_waker(&waker);
138135
f(&mut context, Pin::new(&mut self.inner))

0 commit comments

Comments
 (0)