Skip to content

Commit bd48908

Browse files
authored
Return worker index in WakerInterest::WorkerAvailable (#337)
1 parent 20c2da1 commit bd48908

File tree

4 files changed

+8
-7
lines changed

4 files changed

+8
-7
lines changed

actix-server/src/accept.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,10 @@ impl Accept {
238238
match guard.pop_front() {
239239
// worker notify it becomes available. we may want to recover
240240
// from backpressure.
241-
Some(WakerInterest::WorkerAvailable) => {
241+
Some(WakerInterest::WorkerAvailable(idx)) => {
242242
drop(guard);
243-
// Assume all worker are avail as no worker index returned.
244-
self.avail.set_available_all(&self.handles);
245243
self.maybe_backpressure(&mut sockets, false);
244+
self.avail.set_available(idx, true);
246245
}
247246
// a new worker thread is made and it's handle would be added to Accept
248247
Some(WakerInterest::Worker(handle)) => {

actix-server/src/builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ impl ServerBuilder {
320320
idx: usize,
321321
waker: WakerQueue,
322322
) -> (WorkerHandleAccept, WorkerHandleServer) {
323-
let avail = WorkerAvailability::new(waker);
323+
let avail = WorkerAvailability::new(idx, waker);
324324
let services = self.services.iter().map(|v| v.clone_factory()).collect();
325325

326326
ServerWorker::start(idx, services, avail, self.worker_config)

actix-server/src/waker_queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ impl WakerQueue {
7272
pub(crate) enum WakerInterest {
7373
/// `WorkerAvailable` is an interest from `Worker` notifying `Accept` there is a worker
7474
/// available and can accept new tasks.
75-
WorkerAvailable,
75+
WorkerAvailable(usize),
7676
/// `Pause`, `Resume`, `Stop` Interest are from `ServerBuilder` future. It listens to
7777
/// `ServerCommand` and notify `Accept` to do exactly these tasks.
7878
Pause,

actix-server/src/worker.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,15 @@ impl WorkerHandleServer {
9696

9797
#[derive(Clone)]
9898
pub(crate) struct WorkerAvailability {
99+
idx: usize,
99100
waker: WakerQueue,
100101
available: Arc<AtomicBool>,
101102
}
102103

103104
impl WorkerAvailability {
104-
pub fn new(waker: WakerQueue) -> Self {
105+
pub fn new(idx: usize, waker: WakerQueue) -> Self {
105106
WorkerAvailability {
107+
idx,
106108
waker,
107109
available: Arc::new(AtomicBool::new(false)),
108110
}
@@ -116,7 +118,7 @@ impl WorkerAvailability {
116118
let old = self.available.swap(val, Ordering::Release);
117119
// notify the accept on switched to available.
118120
if !old && val {
119-
self.waker.wake(WakerInterest::WorkerAvailable);
121+
self.waker.wake(WakerInterest::WorkerAvailable(self.idx));
120122
}
121123
}
122124
}

0 commit comments

Comments
 (0)