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:
Jonathan Schwender 2025-09-19 13:37:33 +08:00 committed by GitHub
parent f03f9c7e1b
commit d08be14c7a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 33 deletions

26
Cargo.lock generated
View file

@ -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]]

View file

@ -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"] }

View file

@ -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