diff options
Diffstat (limited to 'components/script/dom/abstractworkerglobalscope.rs')
-rw-r--r-- | components/script/dom/abstractworkerglobalscope.rs | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/components/script/dom/abstractworkerglobalscope.rs b/components/script/dom/abstractworkerglobalscope.rs index e01b98cf944..14cbabd3cf0 100644 --- a/components/script/dom/abstractworkerglobalscope.rs +++ b/components/script/dom/abstractworkerglobalscope.rs @@ -11,8 +11,8 @@ use crate::dom::worker::TrustedWorkerAddress; use crate::dom::workerglobalscope::WorkerGlobalScope; use crate::script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort}; use crate::task_queue::{QueuedTaskConversion, TaskQueue}; +use crossbeam_channel::{Receiver, Sender}; use devtools_traits::DevtoolScriptControlMsg; -use servo_channel::{Receiver, Sender}; /// A ScriptChan that can be cloned freely and will silently send a TrustedWorkerAddress with /// common event loop messages. While this SendableWorkerScriptChan is alive, the associated @@ -69,9 +69,9 @@ impl ScriptChan for WorkerThreadWorkerChan { impl ScriptPort for Receiver<DedicatedWorkerScriptMsg> { fn recv(&self) -> Result<CommonScriptMsg, ()> { let common_msg = match self.recv() { - Some(DedicatedWorkerScriptMsg::CommonWorker(_worker, common_msg)) => common_msg, - None => return Err(()), - Some(DedicatedWorkerScriptMsg::WakeUp) => panic!("unexpected worker event message!"), + Ok(DedicatedWorkerScriptMsg::CommonWorker(_worker, common_msg)) => common_msg, + Err(_) => return Err(()), + Ok(DedicatedWorkerScriptMsg::WakeUp) => panic!("unexpected worker event message!"), }; match common_msg { WorkerScriptMsg::Common(script_msg) => Ok(script_msg), @@ -108,17 +108,18 @@ pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>( let scope = worker_scope.upcast::<WorkerGlobalScope>(); let timer_event_port = worker_scope.timer_event_port(); let devtools_port = match scope.from_devtools_sender() { - Some(_) => Some(scope.from_devtools_receiver().select()), + Some(_) => Some(scope.from_devtools_receiver()), None => None, }; let task_queue = worker_scope.task_queue(); let event = select! { - recv(task_queue.select(), msg) => { + recv(task_queue.select()) -> msg => { task_queue.take_tasks(msg.unwrap()); worker_scope.from_worker_msg(task_queue.recv().unwrap()) }, - recv(timer_event_port.select(), msg) => worker_scope.from_timer_msg(msg.unwrap()), - recv(devtools_port, msg) => worker_scope.from_devtools_msg(msg.unwrap()), + recv(timer_event_port) -> msg => worker_scope.from_timer_msg(msg.unwrap()), + recv(devtools_port.unwrap_or(&crossbeam_channel::never())) -> msg => + worker_scope.from_devtools_msg(msg.unwrap()), }; let mut sequential = vec![]; sequential.push(event); @@ -131,14 +132,15 @@ pub fn run_worker_event_loop<T, TimerMsg, WorkerMsg, Event>( // Batch all events that are ready. // The task queue will throttle non-priority tasks if necessary. match task_queue.try_recv() { - None => match timer_event_port.try_recv() { - None => match devtools_port.and_then(|port| port.try_recv()) { - None => break, - Some(ev) => sequential.push(worker_scope.from_devtools_msg(ev)), + Err(_) => match timer_event_port.try_recv() { + Err(_) => match devtools_port.map(|port| port.try_recv()) { + None => {}, + Some(Err(_)) => break, + Some(Ok(ev)) => sequential.push(worker_scope.from_devtools_msg(ev)), }, - Some(ev) => sequential.push(worker_scope.from_timer_msg(ev)), + Ok(ev) => sequential.push(worker_scope.from_timer_msg(ev)), }, - Some(ev) => sequential.push(worker_scope.from_worker_msg(ev)), + Ok(ev) => sequential.push(worker_scope.from_worker_msg(ev)), } } // Step 3 |