From d08be14c7ac00f4bb4e683169a3d83045ab5268f Mon Sep 17 00:00:00 2001 From: Jonathan Schwender <55576758+jschwe@users.noreply.github.com> Date: Fri, 19 Sep 2025 13:37:33 +0800 Subject: [PATCH] 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>>` 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 --- Cargo.lock | 26 +++++++++---------- Cargo.toml | 2 +- .../shared/fonts/system_font_service_proxy.rs | 25 +++++------------- 3 files changed, 20 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f161a38925..96627739049 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -378,7 +378,7 @@ dependencies = [ "objc2-foundation 0.3.1", "parking_lot", "percent-encoding", - "windows-sys 0.60.2", + "windows-sys 0.52.0", "x11rb", ] @@ -2557,7 +2557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.52.0", ] [[package]] @@ -3159,7 +3159,7 @@ dependencies = [ "vec_map", "wasm-bindgen", "web-sys", - "windows 0.61.3", + "windows 0.58.0", ] [[package]] @@ -3178,7 +3178,7 @@ dependencies = [ "gobject-sys", "libc", "system-deps 7.0.5", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -4062,7 +4062,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.58.0", ] [[package]] @@ -4650,9 +4650,9 @@ dependencies = [ [[package]] name = "ipc-channel" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1700f6b8b9f00cdd675f32fbb3a5be882213140dfe045805273221ca266c43f8" +checksum = "f93600b5616c2d075f8af8dbd23c1d69278c5d24e4913d220cbc60b14c95c180" dependencies = [ "bincode", "crossbeam-channel", @@ -4663,7 +4663,7 @@ dependencies = [ "serde", "tempfile", "uuid", - "windows 0.58.0", + "windows 0.61.3", ] [[package]] @@ -4674,7 +4674,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -7179,7 +7179,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -7192,7 +7192,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -8653,7 +8653,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix 1.0.8", - "windows-sys 0.61.0", + "windows-sys 0.52.0", ] [[package]] @@ -10193,7 +10193,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.0", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 9f0c034cb8e..180dafc4b37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -86,7 +86,7 @@ icu_segmenter = "1.5.0" image = "0.25" imsz = "0.2" indexmap = { version = "2.11.4", features = ["std"] } -ipc-channel = "0.20" +ipc-channel = "0.20.2" itertools = "0.14" js = { package = "mozjs", git = "https://github.com/servo/mozjs" } keyboard-types = { version = "0.8.1", features = ["serde", "webdriver"] } diff --git a/components/shared/fonts/system_font_service_proxy.rs b/components/shared/fonts/system_font_service_proxy.rs index fa5a5e7c730..8b32fcedde5 100644 --- a/components/shared/fonts/system_font_service_proxy.rs +++ b/components/shared/fonts/system_font_service_proxy.rs @@ -7,7 +7,7 @@ use std::collections::HashMap; use ipc_channel::ipc::{self, IpcSender}; use log::debug; use malloc_size_of_derive::MallocSizeOf; -use parking_lot::{Mutex, RwLock}; +use parking_lot::RwLock; use profile_traits::mem::ReportsChan; use serde::{Deserialize, Serialize}; use style::values::computed::font::SingleFontFamily; @@ -44,7 +44,7 @@ pub struct SystemFontServiceProxySender(pub IpcSender) impl SystemFontServiceProxySender { pub fn to_proxy(&self) -> SystemFontServiceProxy { SystemFontServiceProxy { - sender: Mutex::new(self.0.clone()), + sender: self.0.clone(), templates: Default::default(), } } @@ -60,7 +60,7 @@ struct FontTemplateCacheKey { /// `FontContext` instances. #[derive(Debug, MallocSizeOf)] pub struct SystemFontServiceProxy { - sender: Mutex>, + sender: IpcSender, templates: RwLock>>, } @@ -68,7 +68,6 @@ impl SystemFontServiceProxy { pub fn exit(&self) { let (response_chan, response_port) = ipc::channel().unwrap(); self.sender - .lock() .send(SystemFontServiceMessage::Exit(response_chan)) .expect("Couldn't send SystemFontService exit message"); response_port @@ -77,7 +76,7 @@ impl SystemFontServiceProxy { } pub fn to_sender(&self) -> SystemFontServiceProxySender { - SystemFontServiceProxySender(self.sender.lock().clone()) + SystemFontServiceProxySender(self.sender.clone()) } pub fn get_system_font_instance( @@ -89,7 +88,6 @@ impl SystemFontServiceProxy { ) -> FontInstanceKey { let (response_chan, response_port) = ipc::channel().expect("failed to create IPC channel"); self.sender - .lock() .send(SystemFontServiceMessage::GetFontInstance( identifier, size, @@ -101,11 +99,7 @@ impl SystemFontServiceProxy { let instance_key = response_port.recv(); if instance_key.is_err() { - let font_thread_has_closed = self - .sender - .lock() - .send(SystemFontServiceMessage::Ping) - .is_err(); + let font_thread_has_closed = self.sender.send(SystemFontServiceMessage::Ping).is_err(); assert!( font_thread_has_closed, "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"); self.sender - .lock() .send(SystemFontServiceMessage::GetFontTemplates( descriptor_to_match.cloned(), family_descriptor.clone(), @@ -144,11 +137,7 @@ impl SystemFontServiceProxy { .expect("failed to send message to system font service"); let Ok(templates) = response_port.recv() else { - let font_thread_has_closed = self - .sender - .lock() - .send(SystemFontServiceMessage::Ping) - .is_err(); + let font_thread_has_closed = self.sender.send(SystemFontServiceMessage::Ping).is_err(); assert!( font_thread_has_closed, "Failed to receive a response from live font cache" @@ -166,7 +155,6 @@ impl SystemFontServiceProxy { let (result_sender, result_receiver) = ipc::channel().expect("failed to create IPC channel"); self.sender - .lock() .send(SystemFontServiceMessage::GetFontKey(result_sender)) .expect("failed to send message to system font service"); result_receiver @@ -178,7 +166,6 @@ impl SystemFontServiceProxy { let (result_sender, result_receiver) = ipc::channel().expect("failed to create IPC channel"); self.sender - .lock() .send(SystemFontServiceMessage::GetFontInstanceKey(result_sender)) .expect("failed to send message to system font service"); result_receiver