diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs index bdd70fbb8ef..f6ab1d825a0 100644 --- a/components/canvas/canvas_paint_thread.rs +++ b/components/canvas/canvas_paint_thread.rs @@ -66,6 +66,7 @@ impl<'a> CanvasPaintThread <'a> { } } }, + CanvasMsg::Exit => break, } }, Err(e) => { diff --git a/components/canvas_traits/canvas.rs b/components/canvas_traits/canvas.rs index 0bf4a4ac71c..b78c9da08ea 100644 --- a/components/canvas_traits/canvas.rs +++ b/components/canvas_traits/canvas.rs @@ -27,6 +27,7 @@ pub enum CanvasMsg { FromScript(FromScriptMsg, CanvasId), Recreate(Size2D, CanvasId), Close(CanvasId), + Exit, } #[derive(Clone, Deserialize, Serialize)] diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index a54ac7fed7f..95efb23b2ea 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -1441,6 +1441,11 @@ where } } + debug!("Exiting Canvas Paint thread."); + if let Err(e) = self.canvas_chan.send(CanvasMsg::Exit) { + warn!("Exit Canvas Paint thread failed ({})", e); + } + if let Some(webgl_threads) = self.webgl_threads.as_ref() { debug!("Exiting WebGL thread."); if let Err(e) = webgl_threads.exit() {