Skip to content

Commit

Permalink
auto merge of #3820 : cgaebel/servo/rebase-lalehs-patch, r=pcwalton
Browse files Browse the repository at this point in the history
I addressed all but one of the code review comments, which was a request
for documentation on where a number came from (which I'm not qualified to
answer), and rebased this on to latest master.

xref: #3505 cc: @LalehB @larsbergstrom

r? @pcwalton
  • Loading branch information
bors-servo committed Oct 28, 2014
2 parents 005cfed + 293969c commit 9e94ecf
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion components/util/workqueue.rs
Expand Up @@ -16,6 +16,7 @@ use std::rand::weak_rng;
use std::sync::atomics::{AtomicUint, SeqCst};
use std::sync::deque::{Abort, BufferPool, Data, Empty, Stealer, Worker};
use std::task::TaskBuilder;
use libc::funcs::posix88::unistd::usleep;

/// A unit of work.
///
Expand Down Expand Up @@ -70,7 +71,9 @@ struct WorkerThread<QueueData, WorkData> {
rng: XorShiftRng,
}

static SPIN_COUNT: uint = 1000;
static SPIN_COUNT: u32 = 128;
static SPINS_UNTIL_BACKOFF: u32 = 100;
static BACKOFF_INCREMENT_IN_US: u32 = 5;

impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
/// The main logic. This function starts up the worker and listens for
Expand All @@ -84,6 +87,8 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
ExitMsg => return,
};

let mut back_off_sleep = 0 as u32;

// We're off!
//
// FIXME(pcwalton): Can't use labeled break or continue cross-crate due to a Rust bug.
Expand All @@ -107,10 +112,18 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> {
}
Data(work) => {
work_unit = work;
back_off_sleep = 0 as u32;
break
}
}

if i > SPINS_UNTIL_BACKOFF {
unsafe {
usleep(back_off_sleep as u32);
}
back_off_sleep += BACKOFF_INCREMENT_IN_US;
}

if i == SPIN_COUNT {
match self.port.try_recv() {
Ok(StopMsg) => {
Expand Down

0 comments on commit 9e94ecf

Please sign in to comment.