mirror of
https://github.com/servo/servo.git
synced 2025-09-20 11:50:09 +01:00
Bump ipc_channel and remove unnecessary lock in SystemFontServiceProxy (#39350)
Since IpcSender is now Sync (since `ipc_channel` 0.20.2), we can remove locks that were added just to make structs containing the sender `Sync` again. There is another occurrence of `Arc<Mutex<IpcSender<>>>` in `RequestBody`, however that sender is exchanged / updated, so cloning the sender instead of the Arc would change behavior, hence this PR does not touch it. Testing: Covered by existing tests --------- Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
This commit is contained in:
parent
f03f9c7e1b
commit
d08be14c7a
3 changed files with 20 additions and 33 deletions
26
Cargo.lock
generated
26
Cargo.lock
generated
|
@ -378,7 +378,7 @@ dependencies = [
|
||||||
"objc2-foundation 0.3.1",
|
"objc2-foundation 0.3.1",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"windows-sys 0.60.2",
|
"windows-sys 0.52.0",
|
||||||
"x11rb",
|
"x11rb",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -2557,7 +2557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.61.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3159,7 +3159,7 @@ dependencies = [
|
||||||
"vec_map",
|
"vec_map",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"web-sys",
|
"web-sys",
|
||||||
"windows 0.61.3",
|
"windows 0.58.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3178,7 +3178,7 @@ dependencies = [
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 7.0.5",
|
"system-deps 7.0.5",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4062,7 +4062,7 @@ dependencies = [
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"log",
|
"log",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"windows-core 0.61.2",
|
"windows-core 0.58.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4650,9 +4650,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ipc-channel"
|
name = "ipc-channel"
|
||||||
version = "0.20.1"
|
version = "0.20.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1700f6b8b9f00cdd675f32fbb3a5be882213140dfe045805273221ca266c43f8"
|
checksum = "f93600b5616c2d075f8af8dbd23c1d69278c5d24e4913d220cbc60b14c95c180"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode",
|
"bincode",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
@ -4663,7 +4663,7 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"uuid",
|
"uuid",
|
||||||
"windows 0.58.0",
|
"windows 0.61.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4674,7 +4674,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi",
|
"hermit-abi",
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -7179,7 +7179,7 @@ dependencies = [
|
||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys 0.4.15",
|
"linux-raw-sys 0.4.15",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -7192,7 +7192,7 @@ dependencies = [
|
||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys 0.9.4",
|
"linux-raw-sys 0.9.4",
|
||||||
"windows-sys 0.60.2",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -8653,7 +8653,7 @@ dependencies = [
|
||||||
"getrandom 0.3.3",
|
"getrandom 0.3.3",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix 1.0.8",
|
"rustix 1.0.8",
|
||||||
"windows-sys 0.61.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -10193,7 +10193,7 @@ version = "0.1.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.61.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -86,7 +86,7 @@ icu_segmenter = "1.5.0"
|
||||||
image = "0.25"
|
image = "0.25"
|
||||||
imsz = "0.2"
|
imsz = "0.2"
|
||||||
indexmap = { version = "2.11.4", features = ["std"] }
|
indexmap = { version = "2.11.4", features = ["std"] }
|
||||||
ipc-channel = "0.20"
|
ipc-channel = "0.20.2"
|
||||||
itertools = "0.14"
|
itertools = "0.14"
|
||||||
js = { package = "mozjs", git = "https://github.com/servo/mozjs" }
|
js = { package = "mozjs", git = "https://github.com/servo/mozjs" }
|
||||||
keyboard-types = { version = "0.8.1", features = ["serde", "webdriver"] }
|
keyboard-types = { version = "0.8.1", features = ["serde", "webdriver"] }
|
||||||
|
|
|
@ -7,7 +7,7 @@ use std::collections::HashMap;
|
||||||
use ipc_channel::ipc::{self, IpcSender};
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use malloc_size_of_derive::MallocSizeOf;
|
use malloc_size_of_derive::MallocSizeOf;
|
||||||
use parking_lot::{Mutex, RwLock};
|
use parking_lot::RwLock;
|
||||||
use profile_traits::mem::ReportsChan;
|
use profile_traits::mem::ReportsChan;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use style::values::computed::font::SingleFontFamily;
|
use style::values::computed::font::SingleFontFamily;
|
||||||
|
@ -44,7 +44,7 @@ pub struct SystemFontServiceProxySender(pub IpcSender<SystemFontServiceMessage>)
|
||||||
impl SystemFontServiceProxySender {
|
impl SystemFontServiceProxySender {
|
||||||
pub fn to_proxy(&self) -> SystemFontServiceProxy {
|
pub fn to_proxy(&self) -> SystemFontServiceProxy {
|
||||||
SystemFontServiceProxy {
|
SystemFontServiceProxy {
|
||||||
sender: Mutex::new(self.0.clone()),
|
sender: self.0.clone(),
|
||||||
templates: Default::default(),
|
templates: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ struct FontTemplateCacheKey {
|
||||||
/// `FontContext` instances.
|
/// `FontContext` instances.
|
||||||
#[derive(Debug, MallocSizeOf)]
|
#[derive(Debug, MallocSizeOf)]
|
||||||
pub struct SystemFontServiceProxy {
|
pub struct SystemFontServiceProxy {
|
||||||
sender: Mutex<IpcSender<SystemFontServiceMessage>>,
|
sender: IpcSender<SystemFontServiceMessage>,
|
||||||
templates: RwLock<HashMap<FontTemplateCacheKey, Vec<FontTemplateRef>>>,
|
templates: RwLock<HashMap<FontTemplateCacheKey, Vec<FontTemplateRef>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,6 @@ impl SystemFontServiceProxy {
|
||||||
pub fn exit(&self) {
|
pub fn exit(&self) {
|
||||||
let (response_chan, response_port) = ipc::channel().unwrap();
|
let (response_chan, response_port) = ipc::channel().unwrap();
|
||||||
self.sender
|
self.sender
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::Exit(response_chan))
|
.send(SystemFontServiceMessage::Exit(response_chan))
|
||||||
.expect("Couldn't send SystemFontService exit message");
|
.expect("Couldn't send SystemFontService exit message");
|
||||||
response_port
|
response_port
|
||||||
|
@ -77,7 +76,7 @@ impl SystemFontServiceProxy {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_sender(&self) -> SystemFontServiceProxySender {
|
pub fn to_sender(&self) -> SystemFontServiceProxySender {
|
||||||
SystemFontServiceProxySender(self.sender.lock().clone())
|
SystemFontServiceProxySender(self.sender.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_system_font_instance(
|
pub fn get_system_font_instance(
|
||||||
|
@ -89,7 +88,6 @@ impl SystemFontServiceProxy {
|
||||||
) -> FontInstanceKey {
|
) -> FontInstanceKey {
|
||||||
let (response_chan, response_port) = ipc::channel().expect("failed to create IPC channel");
|
let (response_chan, response_port) = ipc::channel().expect("failed to create IPC channel");
|
||||||
self.sender
|
self.sender
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::GetFontInstance(
|
.send(SystemFontServiceMessage::GetFontInstance(
|
||||||
identifier,
|
identifier,
|
||||||
size,
|
size,
|
||||||
|
@ -101,11 +99,7 @@ impl SystemFontServiceProxy {
|
||||||
|
|
||||||
let instance_key = response_port.recv();
|
let instance_key = response_port.recv();
|
||||||
if instance_key.is_err() {
|
if instance_key.is_err() {
|
||||||
let font_thread_has_closed = self
|
let font_thread_has_closed = self.sender.send(SystemFontServiceMessage::Ping).is_err();
|
||||||
.sender
|
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::Ping)
|
|
||||||
.is_err();
|
|
||||||
assert!(
|
assert!(
|
||||||
font_thread_has_closed,
|
font_thread_has_closed,
|
||||||
"Failed to receive a response from live font cache"
|
"Failed to receive a response from live font cache"
|
||||||
|
@ -135,7 +129,6 @@ impl SystemFontServiceProxy {
|
||||||
|
|
||||||
let (response_chan, response_port) = ipc::channel().expect("failed to create IPC channel");
|
let (response_chan, response_port) = ipc::channel().expect("failed to create IPC channel");
|
||||||
self.sender
|
self.sender
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::GetFontTemplates(
|
.send(SystemFontServiceMessage::GetFontTemplates(
|
||||||
descriptor_to_match.cloned(),
|
descriptor_to_match.cloned(),
|
||||||
family_descriptor.clone(),
|
family_descriptor.clone(),
|
||||||
|
@ -144,11 +137,7 @@ impl SystemFontServiceProxy {
|
||||||
.expect("failed to send message to system font service");
|
.expect("failed to send message to system font service");
|
||||||
|
|
||||||
let Ok(templates) = response_port.recv() else {
|
let Ok(templates) = response_port.recv() else {
|
||||||
let font_thread_has_closed = self
|
let font_thread_has_closed = self.sender.send(SystemFontServiceMessage::Ping).is_err();
|
||||||
.sender
|
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::Ping)
|
|
||||||
.is_err();
|
|
||||||
assert!(
|
assert!(
|
||||||
font_thread_has_closed,
|
font_thread_has_closed,
|
||||||
"Failed to receive a response from live font cache"
|
"Failed to receive a response from live font cache"
|
||||||
|
@ -166,7 +155,6 @@ impl SystemFontServiceProxy {
|
||||||
let (result_sender, result_receiver) =
|
let (result_sender, result_receiver) =
|
||||||
ipc::channel().expect("failed to create IPC channel");
|
ipc::channel().expect("failed to create IPC channel");
|
||||||
self.sender
|
self.sender
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::GetFontKey(result_sender))
|
.send(SystemFontServiceMessage::GetFontKey(result_sender))
|
||||||
.expect("failed to send message to system font service");
|
.expect("failed to send message to system font service");
|
||||||
result_receiver
|
result_receiver
|
||||||
|
@ -178,7 +166,6 @@ impl SystemFontServiceProxy {
|
||||||
let (result_sender, result_receiver) =
|
let (result_sender, result_receiver) =
|
||||||
ipc::channel().expect("failed to create IPC channel");
|
ipc::channel().expect("failed to create IPC channel");
|
||||||
self.sender
|
self.sender
|
||||||
.lock()
|
|
||||||
.send(SystemFontServiceMessage::GetFontInstanceKey(result_sender))
|
.send(SystemFontServiceMessage::GetFontInstanceKey(result_sender))
|
||||||
.expect("failed to send message to system font service");
|
.expect("failed to send message to system font service");
|
||||||
result_receiver
|
result_receiver
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue