Skip to content

Commit 50ec248

Browse files
authored
refactor(driver)!: make update_waker take &Key (compio-rs#742)
1 parent 5fe94d2 commit 50ec248

3 files changed

Lines changed: 11 additions & 9 deletions

File tree

compio-driver/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ impl Proactor {
271271
}
272272

273273
/// Update the waker of the specified op.
274-
pub fn update_waker<T>(&mut self, op: &mut Key<T>, waker: &Waker) {
274+
pub fn update_waker<T>(&mut self, op: &Key<T>, waker: &Waker) {
275275
op.set_waker(waker);
276276
}
277277

compio-runtime/src/runtime/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,8 @@ impl Runtime {
308308
) -> PushEntry<Key<T>, BufResult<usize, T>> {
309309
instrument!(compio_log::Level::DEBUG, "poll_task", ?key);
310310
let mut driver = self.driver.borrow_mut();
311-
driver.pop(key).map_pending(|mut k| {
312-
driver.update_waker(&mut k, waker);
311+
driver.pop(key).map_pending(|k| {
312+
driver.update_waker(&k, waker);
313313
k
314314
})
315315
}
@@ -321,8 +321,8 @@ impl Runtime {
321321
) -> PushEntry<Key<T>, (BufResult<usize, T>, Extra)> {
322322
instrument!(compio_log::Level::DEBUG, "poll_task_with_extra", ?key);
323323
let mut driver = self.driver.borrow_mut();
324-
driver.pop_with_extra(key).map_pending(|mut k| {
325-
driver.update_waker(&mut k, waker);
324+
driver.pop_with_extra(key).map_pending(|k| {
325+
driver.update_waker(&k, waker);
326326
k
327327
})
328328
}
@@ -336,7 +336,7 @@ impl Runtime {
336336
Poll::Ready(())
337337
} else {
338338
debug!("pending");
339-
timer_runtime.update_waker(key, cx.waker().clone());
339+
timer_runtime.update_waker(key, cx.waker());
340340
Poll::Pending
341341
}
342342
}

compio-runtime/src/runtime/time.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,11 @@ impl TimerRuntime {
5353
}
5454

5555
/// Update the waker for a timer.
56-
pub fn update_waker(&mut self, key: &TimerKey, waker: Waker) {
57-
if let Some(w) = self.wheel.get_mut(key) {
58-
*w = waker;
56+
pub fn update_waker(&mut self, key: &TimerKey, waker: &Waker) {
57+
if let Some(w) = self.wheel.get_mut(key)
58+
&& !waker.will_wake(w)
59+
{
60+
*w = waker.clone();
5961
}
6062
}
6163

0 commit comments

Comments
 (0)