diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-07-03 06:39:53 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-07-03 06:39:53 -0600 |
commit | 59d3b45b74a22fa807872b78e881991e86f7c6ee (patch) | |
tree | b79b86daffda452c59cf093ee1145edc95c293f6 /components/util/workqueue.rs | |
parent | 73b52c095a448116c0f9db23894a0932d0d53484 (diff) | |
parent | b2c226afe68f9902fc904630802812270342c861 (diff) | |
download | servo-59d3b45b74a22fa807872b78e881991e86f7c6ee.tar.gz servo-59d3b45b74a22fa807872b78e881991e86f7c6ee.zip |
Auto merge of #6504 - Ms2ger:workqueue-labeled-break, r=pcwalton
Move back to using a labeled break in WorkQueue.
This was changed in 18a2050a64cd6f320cc59cb490a69b0e895f11d3; it appears to
work fine now.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6504)
<!-- Reviewable:end -->
Diffstat (limited to 'components/util/workqueue.rs')
-rw-r--r-- | components/util/workqueue.rs | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/components/util/workqueue.rs b/components/util/workqueue.rs index 2f0523a09ef..f5f83567da3 100644 --- a/components/util/workqueue.rs +++ b/components/util/workqueue.rs @@ -114,20 +114,13 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> { 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. - loop { - // FIXME(pcwalton): Nasty workaround for the lack of labeled break/continue - // cross-crate. - let mut work_unit = unsafe { - mem::uninitialized() - }; + 'outer: loop { + let work_unit; match deque.pop() { Some(work) => work_unit = work, None => { // Become a thief. let mut i = 0; - let mut should_continue = true; loop { // Don't just use `rand % len` because that's slow on ARM. let mut victim; @@ -153,10 +146,7 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> { if back_off_sleep >= BACKOFF_INCREMENT_IN_US * BACKOFFS_UNTIL_CONTROL_CHECK { match self.port.try_recv() { - Ok(WorkerMsg::Stop) => { - should_continue = false; - break - } + Ok(WorkerMsg::Stop) => break 'outer, Ok(WorkerMsg::Exit) => return, Ok(_) => panic!("unexpected message"), _ => {} @@ -172,10 +162,6 @@ impl<QueueData: Send, WorkData: Send> WorkerThread<QueueData, WorkData> { i += 1 } } - - if !should_continue { - break - } } } |