mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Fixes #23408
Switched from using thread for websocket requests to ipc_channel::router::ROUTER Signed-off-by: Alex Johnson <hello@alex-johnson.net>
This commit is contained in:
parent
4aad79f9d2
commit
1c35c44c35
1 changed files with 36 additions and 37 deletions
|
@ -27,6 +27,7 @@ use crate::task_source::websocket::WebsocketTaskSource;
|
||||||
use crate::task_source::TaskSource;
|
use crate::task_source::TaskSource;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
||||||
|
use ipc_channel::router::ROUTER;
|
||||||
use js::jsapi::{JSAutoRealm, JSObject};
|
use js::jsapi::{JSAutoRealm, JSObject};
|
||||||
use js::jsval::UndefinedValue;
|
use js::jsval::UndefinedValue;
|
||||||
use js::rust::CustomAutoRooterGuard;
|
use js::rust::CustomAutoRooterGuard;
|
||||||
|
@ -40,7 +41,6 @@ use servo_url::{ImmutableOrigin, ServoUrl};
|
||||||
use std::borrow::ToOwned;
|
use std::borrow::ToOwned;
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::thread;
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
|
#[derive(Clone, Copy, Debug, JSTraceable, MallocSizeOf, PartialEq)]
|
||||||
enum WebSocketRequestState {
|
enum WebSocketRequestState {
|
||||||
|
@ -216,42 +216,41 @@ impl WebSocket {
|
||||||
|
|
||||||
let task_source = global.websocket_task_source();
|
let task_source = global.websocket_task_source();
|
||||||
let canceller = global.task_canceller(WebsocketTaskSource::NAME);
|
let canceller = global.task_canceller(WebsocketTaskSource::NAME);
|
||||||
thread::spawn(move || {
|
ROUTER.add_route(
|
||||||
while let Ok(event) = dom_event_receiver.recv() {
|
dom_event_receiver.to_opaque(),
|
||||||
match event {
|
Box::new(move |message| match message.to().unwrap() {
|
||||||
WebSocketNetworkEvent::ConnectionEstablished { protocol_in_use } => {
|
WebSocketNetworkEvent::ConnectionEstablished { protocol_in_use } => {
|
||||||
let open_thread = ConnectionEstablishedTask {
|
let open_thread = ConnectionEstablishedTask {
|
||||||
address: address.clone(),
|
address: address.clone(),
|
||||||
protocol_in_use,
|
protocol_in_use,
|
||||||
};
|
};
|
||||||
task_source
|
task_source
|
||||||
.queue_with_canceller(open_thread, &canceller)
|
.queue_with_canceller(open_thread, &canceller)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
},
|
},
|
||||||
WebSocketNetworkEvent::MessageReceived(message) => {
|
WebSocketNetworkEvent::MessageReceived(message) => {
|
||||||
let message_thread = MessageReceivedTask {
|
let message_thread = MessageReceivedTask {
|
||||||
address: address.clone(),
|
address: address.clone(),
|
||||||
message: message,
|
message: message,
|
||||||
};
|
};
|
||||||
task_source
|
task_source
|
||||||
.queue_with_canceller(message_thread, &canceller)
|
.queue_with_canceller(message_thread, &canceller)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
},
|
},
|
||||||
WebSocketNetworkEvent::Fail => {
|
WebSocketNetworkEvent::Fail => {
|
||||||
fail_the_websocket_connection(address.clone(), &task_source, &canceller);
|
fail_the_websocket_connection(address.clone(), &task_source, &canceller);
|
||||||
},
|
},
|
||||||
WebSocketNetworkEvent::Close(code, reason) => {
|
WebSocketNetworkEvent::Close(code, reason) => {
|
||||||
close_the_websocket_connection(
|
close_the_websocket_connection(
|
||||||
address.clone(),
|
address.clone(),
|
||||||
&task_source,
|
&task_source,
|
||||||
&canceller,
|
&canceller,
|
||||||
code,
|
code,
|
||||||
reason,
|
reason,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
}
|
}),
|
||||||
}
|
);
|
||||||
});
|
|
||||||
|
|
||||||
// Step 7.
|
// Step 7.
|
||||||
Ok(ws)
|
Ok(ws)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue