From ca8c6fb0724a364bdd11742a9c9611557595a6f7 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 4 Oct 2016 15:27:13 +0200 Subject: [PATCH] Make RunnableWrapper store an Option> This makes WorkerGlobalScope::get_runnable_wrapper not panic anymore when the worker is a ServiceWorkerGlobalScope. --- components/script/dom/window.rs | 2 +- components/script/dom/workerglobalscope.rs | 2 +- components/script/script_thread.rs | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 4365ba44999..5f5b0bda04a 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -868,7 +868,7 @@ impl WindowMethods for Window { impl Window { pub fn get_runnable_wrapper(&self) -> RunnableWrapper { RunnableWrapper { - cancelled: self.ignore_further_async_events.clone() + cancelled: Some(self.ignore_further_async_events.clone()), } } diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 49b1d4e3257..f1f2229c823 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -155,7 +155,7 @@ impl WorkerGlobalScope { pub fn get_runnable_wrapper(&self) -> RunnableWrapper { RunnableWrapper { - cancelled: self.closing.clone().unwrap(), + cancelled: self.closing.clone(), } } diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 0d3f605fac1..bbdc766cea4 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -170,7 +170,7 @@ impl InProgressLoad { /// Encapsulated state required to create cancellable runnables from non-script threads. pub struct RunnableWrapper { - pub cancelled: Arc, + pub cancelled: Option>, } impl RunnableWrapper { @@ -184,7 +184,7 @@ impl RunnableWrapper { /// A runnable that can be discarded by toggling a shared flag. pub struct CancellableRunnable { - cancelled: Arc, + cancelled: Option>, inner: Box, } @@ -192,7 +192,9 @@ impl Runnable for CancellableRunnable { fn name(&self) -> &'static str { self.inner.name() } fn is_cancelled(&self) -> bool { - self.cancelled.load(Ordering::SeqCst) + self.cancelled.as_ref() + .map(|cancelled| cancelled.load(Ordering::SeqCst)) + .unwrap_or(false) } fn main_thread_handler(self: Box>, script_thread: &ScriptThread) {