зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #3796 - Servo exit devtools: Send exit message to devtools on browser exit (from shanil-puri:ServoExitDevtools); r=jdm
Source-Repo: https://github.com/servo/servo Source-Revision: d1eaa3adda5e59cc34822d6d1477b987796dfd62
This commit is contained in:
Родитель
757be2eede
Коммит
f04b66f021
|
@ -5,6 +5,7 @@
|
||||||
use pipeline::{Pipeline, CompositionPipeline};
|
use pipeline::{Pipeline, CompositionPipeline};
|
||||||
|
|
||||||
use compositor_task::{CompositorProxy, FrameTreeUpdateMsg, LoadComplete, ShutdownComplete, SetLayerOrigin, SetIds};
|
use compositor_task::{CompositorProxy, FrameTreeUpdateMsg, LoadComplete, ShutdownComplete, SetLayerOrigin, SetIds};
|
||||||
|
use devtools_traits;
|
||||||
use devtools_traits::DevtoolsControlChan;
|
use devtools_traits::DevtoolsControlChan;
|
||||||
use geom::rect::{Rect, TypedRect};
|
use geom::rect::{Rect, TypedRect};
|
||||||
use geom::scale_factor::ScaleFactor;
|
use geom::scale_factor::ScaleFactor;
|
||||||
|
@ -466,6 +467,9 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> {
|
||||||
}
|
}
|
||||||
self.image_cache_task.exit();
|
self.image_cache_task.exit();
|
||||||
self.resource_task.send(resource_task::Exit);
|
self.resource_task.send(resource_task::Exit);
|
||||||
|
self.devtools_chan.as_ref().map(|chan| {
|
||||||
|
chan.send(devtools_traits::ServerExitMsg);
|
||||||
|
});
|
||||||
self.font_cache_task.exit();
|
self.font_cache_task.exit();
|
||||||
self.compositor_proxy.send(ShutdownComplete);
|
self.compositor_proxy.send(ShutdownComplete);
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,8 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
||||||
|
|
||||||
let actors = Arc::new(Mutex::new(registry));
|
let actors = Arc::new(Mutex::new(registry));
|
||||||
|
|
||||||
|
let mut accepted_connections: Vec<TcpStream> = Vec::new();
|
||||||
|
|
||||||
/// Process the input from a single devtools client until EOF.
|
/// Process the input from a single devtools client until EOF.
|
||||||
fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream) {
|
fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream) {
|
||||||
println!("connection established to {}", stream.peer_name().unwrap());
|
println!("connection established to {}", stream.peer_name().unwrap());
|
||||||
|
@ -154,9 +156,6 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
||||||
// from multiple script tasks simultaneously. Polling for new connections
|
// from multiple script tasks simultaneously. Polling for new connections
|
||||||
// for 300ms and then checking the receiver is not a good compromise
|
// for 300ms and then checking the receiver is not a good compromise
|
||||||
// (and makes Servo hang on exit if there's an open connection, no less).
|
// (and makes Servo hang on exit if there's an open connection, no less).
|
||||||
|
|
||||||
//TODO: make constellation send ServerExitMsg on shutdown.
|
|
||||||
|
|
||||||
// accept connections and process them, spawning a new tasks for each one
|
// accept connections and process them, spawning a new tasks for each one
|
||||||
loop {
|
loop {
|
||||||
match acceptor.accept() {
|
match acceptor.accept() {
|
||||||
|
@ -170,6 +169,7 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
||||||
Err(_e) => { /* connection failed */ }
|
Err(_e) => { /* connection failed */ }
|
||||||
Ok(stream) => {
|
Ok(stream) => {
|
||||||
let actors = actors.clone();
|
let actors = actors.clone();
|
||||||
|
accepted_connections.push(stream.clone());
|
||||||
spawn_named("DevtoolsClientHandler", proc() {
|
spawn_named("DevtoolsClientHandler", proc() {
|
||||||
// connection succeeded
|
// connection succeeded
|
||||||
handle_client(actors, stream.clone())
|
handle_client(actors, stream.clone())
|
||||||
|
@ -177,4 +177,9 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for connection in accepted_connections.iter_mut() {
|
||||||
|
let _read = connection.close_read();
|
||||||
|
let _write = connection.close_write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче