servo: Merge #11337 - Don't block the script listener thread on window.close() (from Ms2ger:compositor-exit-wait); r=pcwalton

Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data:
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy --faster` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).

Either:
- [ ] There are tests for these changes OR
- [x] These changes do not require tests because no tangible effect

Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process.

This does not appear to have any effect. I believe this has been the case
since e84106535175211526729e532058a7514a0de372, when the helper thread was
introduced.

It was added in a7ef1cd35e9347a285f245041db4eb94047f4ab0, where it blocked the
script thread rather than this helper thread.

Source-Repo: https://github.com/servo/servo
Source-Revision: 220bdfec2e869035127e872e12d303aefb545579
This commit is contained in:
Ms2ger 2016-05-25 01:03:38 -05:00
Родитель e35d119d3e
Коммит 7a59624889
2 изменённых файлов: 5 добавлений и 8 удалений

Просмотреть файл

@ -528,9 +528,8 @@ impl<Window: WindowMethods> IOCompositor<Window> {
return false
}
(Msg::Exit(channel), _) => {
(Msg::Exit, _) => {
self.start_shutting_down();
let _ = channel.send(());
}
(Msg::ShutdownComplete, _) => {

Просмотреть файл

@ -9,7 +9,7 @@ use compositor::{self, CompositingReason};
use euclid::point::Point2D;
use euclid::size::Size2D;
use gfx_traits::{Epoch, FrameTreeId, LayerId, LayerProperties, PaintListener};
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::ipc::{IpcReceiver, IpcSender};
use layers::layers::{BufferRequest, LayerBufferSet};
use layers::platform::surface::{NativeDisplay, NativeSurface};
use msg::constellation_msg::{Image, Key, KeyModifiers, KeyState, PipelineId};
@ -79,9 +79,7 @@ pub fn run_script_listener_thread(compositor_proxy: Box<CompositorProxy + 'stati
}
ScriptToCompositorMsg::Exit => {
let (chan, port) = ipc::channel().unwrap();
compositor_proxy.send(Msg::Exit(chan));
port.recv().unwrap();
compositor_proxy.send(Msg::Exit);
}
ScriptToCompositorMsg::SetTitle(pipeline_id, title) => {
@ -167,7 +165,7 @@ impl PaintListener for Box<CompositorProxy + 'static + Send> {
/// Messages from the painting thread and the constellation thread to the compositor thread.
pub enum Msg {
/// Requests that the compositor shut down.
Exit(IpcSender<()>),
Exit,
/// Informs the compositor that the constellation has completed shutdown.
/// Required because the constellation can have pending calls to make
@ -246,7 +244,7 @@ pub enum Msg {
impl Debug for Msg {
fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
match *self {
Msg::Exit(..) => write!(f, "Exit"),
Msg::Exit => write!(f, "Exit"),
Msg::ShutdownComplete => write!(f, "ShutdownComplete"),
Msg::GetNativeDisplay(..) => write!(f, "GetNativeDisplay"),
Msg::InitializeLayersForPipeline(..) => write!(f, "InitializeLayersForPipeline"),