aboutsummaryrefslogtreecommitdiffstats
path: root/components/constellation/pipeline.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/constellation/pipeline.rs')
-rw-r--r--components/constellation/pipeline.rs11
1 files changed, 4 insertions, 7 deletions
diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs
index 3f4abbbbc3e..7718eb76036 100644
--- a/components/constellation/pipeline.rs
+++ b/components/constellation/pipeline.rs
@@ -309,6 +309,8 @@ impl Pipeline {
// The compositor wants to know when pipelines shut down too.
// It may still have messages to process from these other threads
// before they can be safely shut down.
+ // It's OK for the constellation to block on the compositor,
+ // since the compositor never blocks on the constellation.
if let Ok((sender, receiver)) = ipc::channel() {
self.compositor_proxy.send(CompositorMsg::PipelineExited(self.id, sender));
if let Err(e) = receiver.recv() {
@@ -318,13 +320,8 @@ impl Pipeline {
// Script thread handles shutting down layout, and layout handles shutting down the painter.
// For now, if the script thread has failed, we give up on clean shutdown.
- if self.script_chan
- .send(ConstellationControlMsg::ExitPipeline(self.id))
- .is_ok() {
- // Wait until all slave threads have terminated and run destructors
- // NOTE: We don't wait for script thread as we don't always own it
- let _ = self.paint_shutdown_port.recv();
- let _ = self.layout_shutdown_port.recv();
+ if let Err(e) = self.script_chan.send(ConstellationControlMsg::ExitPipeline(self.id)) {
+ warn!("Sending script exit message failed ({}).", e);
}
}