Bug 1860960 - Update AudioIPC to ec6af6ec. r=cubeb-reviewers,padenot

Differential Revision: https://phabricator.services.mozilla.com/D191838
This commit is contained in:
Matthew Gregan 2023-10-25 19:50:43 +00:00
parent 3ffa4e8008
commit b8644ef4d3
14 changed files with 83 additions and 91 deletions

View file

@ -70,9 +70,9 @@ git = "https://github.com/mozilla/application-services"
rev = "04f012eab55b080a17c92cf54ad83668276ac365"
replace-with = "vendored-sources"
[source."git+https://github.com/mozilla/audioipc?rev=0b51291d2483a17dce3e300c7784b369e02bee73"]
[source."git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543"]
git = "https://github.com/mozilla/audioipc"
rev = "0b51291d2483a17dce3e300c7784b369e02bee73"
rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543"
replace-with = "vendored-sources"
[source."git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=93b5c01a131f65c83c11aeb317f4583405c5eb79"]

8
Cargo.lock generated
View file

@ -250,7 +250,7 @@ dependencies = [
[[package]]
name = "audioipc2"
version = "0.5.0"
source = "git+https://github.com/mozilla/audioipc?rev=0b51291d2483a17dce3e300c7784b369e02bee73#0b51291d2483a17dce3e300c7784b369e02bee73"
source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543"
dependencies = [
"arrayvec",
"ashmem",
@ -272,13 +272,13 @@ dependencies = [
"serde_bytes",
"serde_derive",
"slab",
"winapi",
"windows-sys",
]
[[package]]
name = "audioipc2-client"
version = "0.5.0"
source = "git+https://github.com/mozilla/audioipc?rev=0b51291d2483a17dce3e300c7784b369e02bee73#0b51291d2483a17dce3e300c7784b369e02bee73"
source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543"
dependencies = [
"audio_thread_priority",
"audioipc2",
@ -289,7 +289,7 @@ dependencies = [
[[package]]
name = "audioipc2-server"
version = "0.5.0"
source = "git+https://github.com/mozilla/audioipc?rev=0b51291d2483a17dce3e300c7784b369e02bee73#0b51291d2483a17dce3e300c7784b369e02bee73"
source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543"
dependencies = [
"audio_thread_priority",
"audioipc2",

View file

@ -1 +1 @@
{"files":{"Cargo.toml":"9a41bc278a815fdcbe8d07c1d32f5cedb17dec3375993351b942567b4a644f9e","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/context.rs":"93dc43233603409dbb0c5de20c4e838c88bb0711df65cd5afc882f5b5e39f659","src/lib.rs":"c4a6797734489280f6b97dd72c9e51a7bd7be4104592eece3929e29d45cbca4a","src/send_recv.rs":"859abe75b521eb4297c84b30423814b5b87f3c7741ad16fe72189212e123e1ac","src/stream.rs":"3101f4052e35c1600adafedc67aed92d7d5531ff0ff4845de0a5ea3cedef872d"},"package":null}
{"files":{"Cargo.toml":"234b81b986ab93768ccacc68d973d6125e3769337d4b0a7b137d19d1666db8a4","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/context.rs":"86d31460a48a9bdc0ac4fbef522d267c26f68dd79a12e0cbc35b3a4b6f6449dc","src/lib.rs":"c4a6797734489280f6b97dd72c9e51a7bd7be4104592eece3929e29d45cbca4a","src/send_recv.rs":"859abe75b521eb4297c84b30423814b5b87f3c7741ad16fe72189212e123e1ac","src/stream.rs":"3101f4052e35c1600adafedc67aed92d7d5531ff0ff4845de0a5ea3cedef872d"},"package":null}

View file

@ -21,14 +21,10 @@ description = "Cubeb Backend for talking to remote cubeb server."
license = "ISC"
[dependencies]
audio_thread_priority = "0.26"
cubeb-backend = "0.10"
log = "0.4"
[dependencies.audio_thread_priority]
version = "0.26.1"
features = ["winapi"]
default-features = false
[dependencies.audioipc]
path = "../audioipc"
package = "audioipc2"

View file

@ -264,11 +264,7 @@ impl ContextOps for ClientContext {
assert_not_in_callback();
unsafe {
let coll = &mut *collection.as_ptr();
let mut devices = Vec::from_raw_parts(
coll.device as *mut ffi::cubeb_device_info,
coll.count,
coll.count,
);
let mut devices = Vec::from_raw_parts(coll.device, coll.count, coll.count);
for dev in &mut devices {
if !dev.device_id.is_null() {
let _ = CString::from_raw(dev.device_id as *mut _);

View file

@ -1 +1 @@
{"files":{"Cargo.toml":"4b00cd5b0ef67640c29a5b4c27ff0eb2bda60ea9bfaa0321625e2eb48714efa8","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/lib.rs":"06aff4fd1326aeabb16b01f81a6f3c59c1717ebe96285a063724830cdf30303a","src/server.rs":"ea839fe4607ba6b70a1ef5dfb2305eb668b148820c5590b87192609fbe3c9edd"},"package":null}
{"files":{"Cargo.toml":"9c801164c20a9af8c43135848244112002bd07a05b1c7165c2eb7be2db23898b","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/lib.rs":"06aff4fd1326aeabb16b01f81a6f3c59c1717ebe96285a063724830cdf30303a","src/server.rs":"ea839fe4607ba6b70a1ef5dfb2305eb668b148820c5590b87192609fbe3c9edd"},"package":null}

View file

@ -21,16 +21,12 @@ description = "Remote cubeb server"
license = "ISC"
[dependencies]
audio_thread_priority = "0.26"
cubeb-core = "0.10.0"
log = "0.4"
once_cell = "1.2.0"
slab = "0.4"
[dependencies.audio_thread_priority]
version = "0.26.1"
features = ["winapi"]
default-features = false
[dependencies.audioipc]
path = "../audioipc"
package = "audioipc2"

View file

@ -1 +1 @@
{"files":{"Cargo.toml":"6d3b3004351e3313ef74472ab6b3f96d59a785b3d873698ca4caf67eb3d47aab","benches/serialization.rs":"d56855d868dab6aa22c8b03a61084535351b76c94b68d8b1d20764e352fe473f","build.rs":"65df9a97c6cdaa3faf72581f04ac289197b0b1797d69d22c1796e957ff1089e2","src/codec.rs":"38408b512d935cd7889a03b25dd14b36083ec4e6d2fcabd636182cf45e3d50bc","src/errors.rs":"67a4a994d0724397657581cde153bdfc05ce86e7efc467f23fafc8f64df80fa4","src/ipccore.rs":"ba339eebdc2d8a6d0cb9b294344809e63e404e220fda643b63a8a3ff63a755e8","src/lib.rs":"9b107cb52081eeea3fa742d30361db70f7138baa423dfe21d37dcf5087afc338","src/messages.rs":"452362da2cace9a0f2e3134c190ecb6a9997f8be4036cde06643e17c6c238240","src/rpccore.rs":"025b6614f1c42b96b0a8e74fd7881032d338c66e0d67ec0af70f910a9e30ebe1","src/shm.rs":"1d88f19606899e3e477865d6b84bbe3e272f51618a1c2d57b6dab03a4787cde3","src/sys/mod.rs":"e6fa1d260abf093e1f7b50185195e2d3aee0eb8c9774c6f253953b5896d838f3","src/sys/unix/cmsg.rs":"22349b3df39b51b9c414da363313c92d41b02a623753ffcca6f59613e8f79eb2","src/sys/unix/cmsghdr.c":"d7344b3dc15cdce410c68669b848bb81f7fe36362cd3699668cb613fa05180f8","src/sys/unix/mod.rs":"59835f0d5509940078b1820a54f49fc5514adeb3e45e7d21e3ab917431da2e74","src/sys/unix/msg.rs":"0e297d73bae9414184f85c2209cca0a3fde6d999a3f1d3f42faa3f56b6d57233","src/sys/windows/mod.rs":"3441a3212c6d44443a5975621d9594b0c841e5a7f113aa1b108a080330df2b77"},"package":null}
{"files":{"Cargo.toml":"8434bf0fc2131bdca6655fc0e6ff3b87218c92f342785dd453a4018ed1a70b52","benches/serialization.rs":"d56855d868dab6aa22c8b03a61084535351b76c94b68d8b1d20764e352fe473f","build.rs":"65df9a97c6cdaa3faf72581f04ac289197b0b1797d69d22c1796e957ff1089e2","src/codec.rs":"38408b512d935cd7889a03b25dd14b36083ec4e6d2fcabd636182cf45e3d50bc","src/errors.rs":"67a4a994d0724397657581cde153bdfc05ce86e7efc467f23fafc8f64df80fa4","src/ipccore.rs":"ba339eebdc2d8a6d0cb9b294344809e63e404e220fda643b63a8a3ff63a755e8","src/lib.rs":"3881e9069f37e824cbb5dacf1c37192c08b84068098fef96ede6f2ae284edfe3","src/messages.rs":"452362da2cace9a0f2e3134c190ecb6a9997f8be4036cde06643e17c6c238240","src/rpccore.rs":"025b6614f1c42b96b0a8e74fd7881032d338c66e0d67ec0af70f910a9e30ebe1","src/shm.rs":"f8bc0ab17e04b86a746aea7aa4eb15f402e29d80e0d2f9d7c22ac8375a0cea85","src/sys/mod.rs":"e6fa1d260abf093e1f7b50185195e2d3aee0eb8c9774c6f253953b5896d838f3","src/sys/unix/cmsg.rs":"6f0236bf6cd66ccd237b268348a826ae1d266073c2adadcfaae703c556230065","src/sys/unix/cmsghdr.c":"d7344b3dc15cdce410c68669b848bb81f7fe36362cd3699668cb613fa05180f8","src/sys/unix/mod.rs":"59835f0d5509940078b1820a54f49fc5514adeb3e45e7d21e3ab917431da2e74","src/sys/unix/msg.rs":"0e297d73bae9414184f85c2209cca0a3fde6d999a3f1d3f42faa3f56b6d57233","src/sys/windows/mod.rs":"7eaabb76e62c6962b636320e2bbf79a78fce61659c799a798f7dd6d56b0be8a1"},"package":null}

View file

@ -72,11 +72,13 @@ iovec = "0.1"
libc = "0.2"
memmap2 = "0.5"
[target."cfg(windows)".dependencies.winapi]
version = "0.3"
[target."cfg(windows)".dependencies.windows-sys]
version = "0.48"
features = [
"combaseapi",
"handleapi",
"memoryapi",
"objbase",
"Win32_Foundation",
"Win32_Security",
"Win32_Storage_FileSystem",
"Win32_System_Com",
"Win32_System_Memory",
"Win32_System_Threading",
]

View file

@ -40,12 +40,8 @@ pub type PlatformHandleType = libc::c_int;
#[derive(Debug)]
pub struct PlatformHandle(PlatformHandleType);
#[cfg(unix)]
pub const INVALID_HANDLE_VALUE: PlatformHandleType = -1isize as PlatformHandleType;
#[cfg(windows)]
pub const INVALID_HANDLE_VALUE: PlatformHandleType = winapi::um::handleapi::INVALID_HANDLE_VALUE;
#[cfg(unix)]
fn valid_handle(handle: PlatformHandleType) -> bool {
handle >= 0
@ -110,26 +106,31 @@ unsafe fn close_platform_handle(handle: PlatformHandleType) {
}
#[cfg(windows)]
unsafe fn close_platform_handle(handle: PlatformHandleType) {
winapi::um::handleapi::CloseHandle(handle);
}
use windows_sys::Win32::{
Foundation::{
CloseHandle, DuplicateHandle, DUPLICATE_CLOSE_SOURCE, DUPLICATE_SAME_ACCESS, FALSE,
S_FALSE, S_OK,
},
System::Com::{CoInitializeEx, COINIT_MULTITHREADED},
System::Threading::{GetCurrentProcess, OpenProcess, PROCESS_DUP_HANDLE},
};
#[cfg(windows)]
use winapi::shared::minwindef::{DWORD, FALSE};
#[cfg(windows)]
use winapi::um::{handleapi, processthreadsapi, winnt};
unsafe fn close_platform_handle(handle: PlatformHandleType) {
CloseHandle(handle as _);
}
// Duplicate `source_handle` to `target_pid`. Returns the value of the new handle inside the target process.
// If `target_pid` is `None`, `source_handle` is duplicated in the current process.
#[cfg(windows)]
pub(crate) unsafe fn duplicate_platform_handle(
source_handle: PlatformHandleType,
target_pid: Option<DWORD>,
target_pid: Option<u32>,
) -> Result<PlatformHandleType> {
let source_process = processthreadsapi::GetCurrentProcess();
let source_process = GetCurrentProcess();
let target_process = if let Some(pid) = target_pid {
let target = processthreadsapi::OpenProcess(winnt::PROCESS_DUP_HANDLE, FALSE, pid);
if !valid_handle(target) {
let target = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid);
if !valid_handle(target as _) {
return Err(std::io::Error::new(
std::io::ErrorKind::Other,
"invalid target process",
@ -140,18 +141,18 @@ pub(crate) unsafe fn duplicate_platform_handle(
None
};
let mut target_handle = std::ptr::null_mut();
let ok = handleapi::DuplicateHandle(
let mut target_handle = windows_sys::Win32::Foundation::INVALID_HANDLE_VALUE;
let ok = DuplicateHandle(
source_process,
source_handle,
source_handle as _,
target_process.unwrap_or(source_process),
&mut target_handle,
0,
FALSE,
winnt::DUPLICATE_SAME_ACCESS,
DUPLICATE_SAME_ACCESS,
);
if let Some(target) = target_process {
handleapi::CloseHandle(target);
CloseHandle(target);
};
if ok == FALSE {
return Err(std::io::Error::new(
@ -159,7 +160,7 @@ pub(crate) unsafe fn duplicate_platform_handle(
"DuplicateHandle failed",
));
}
Ok(target_handle)
Ok(target_handle as _)
}
// Close `target_handle_to_close` inside target process `target_pid` using a
@ -168,27 +169,26 @@ pub(crate) unsafe fn duplicate_platform_handle(
#[cfg(windows)]
pub(crate) unsafe fn close_target_handle(
target_handle_to_close: PlatformHandleType,
target_pid: DWORD,
target_pid: u32,
) -> Result<()> {
let target_process =
processthreadsapi::OpenProcess(winnt::PROCESS_DUP_HANDLE, FALSE, target_pid);
if !valid_handle(target_process) {
let target_process = OpenProcess(PROCESS_DUP_HANDLE, FALSE, target_pid);
if !valid_handle(target_process as _) {
return Err(std::io::Error::new(
std::io::ErrorKind::Other,
"invalid target process",
));
}
let ok = handleapi::DuplicateHandle(
let ok = DuplicateHandle(
target_process,
target_handle_to_close,
std::ptr::null_mut(),
target_handle_to_close as _,
0,
std::ptr::null_mut(),
0,
FALSE,
winnt::DUPLICATE_CLOSE_SOURCE,
DUPLICATE_CLOSE_SOURCE,
);
handleapi::CloseHandle(target_process);
CloseHandle(target_process);
if ok == FALSE {
return Err(std::io::Error::new(
std::io::ErrorKind::Other,
@ -200,13 +200,9 @@ pub(crate) unsafe fn close_target_handle(
#[cfg(windows)]
pub fn server_platform_init() {
use winapi::shared::winerror;
use winapi::um::combaseapi;
use winapi::um::objbase;
unsafe {
let r = combaseapi::CoInitializeEx(std::ptr::null_mut(), objbase::COINIT_MULTITHREADED);
assert!(winerror::SUCCEEDED(r));
let r = CoInitializeEx(std::ptr::null_mut(), COINIT_MULTITHREADED);
assert!(r == S_OK || r == S_FALSE);
}
}

View file

@ -244,22 +244,22 @@ mod unix {
#[cfg(windows)]
mod windows {
use super::*;
use std::ptr;
use winapi::{
shared::{minwindef::DWORD, ntdef::HANDLE},
um::{
handleapi::CloseHandle,
memoryapi::{MapViewOfFile, UnmapViewOfFile, FILE_MAP_ALL_ACCESS},
winbase::CreateFileMappingA,
winnt::PAGE_READWRITE,
use windows_sys::Win32::{
Foundation::{CloseHandle, FALSE, INVALID_HANDLE_VALUE},
System::Memory::{
CreateFileMappingA, MapViewOfFile, UnmapViewOfFile, FILE_MAP_ALL_ACCESS,
MEMORYMAPPEDVIEW_HANDLE, PAGE_READWRITE,
},
};
use crate::INVALID_HANDLE_VALUE;
use crate::valid_handle;
use super::*;
pub struct SharedMem {
handle: HANDLE,
handle: MEMORYMAPPEDVIEW_HANDLE,
view: SharedMemView,
}
@ -268,10 +268,10 @@ mod windows {
impl Drop for SharedMem {
fn drop(&mut self) {
unsafe {
let ok = UnmapViewOfFile(self.view.ptr);
assert_ne!(ok, 0);
let ok = UnmapViewOfFile(self.view.ptr as _);
assert_ne!(ok, FALSE);
let ok = CloseHandle(self.handle);
assert_ne!(ok, 0);
assert_ne!(ok, FALSE);
}
}
}
@ -284,38 +284,44 @@ mod windows {
ptr::null_mut(),
PAGE_READWRITE,
(size as u64 >> 32).try_into().unwrap(),
(size as u64 & (DWORD::MAX as u64)).try_into().unwrap(),
(size as u64 & (u32::MAX as u64)).try_into().unwrap(),
ptr::null(),
);
if handle.is_null() {
if !valid_handle(handle as _) {
return Err(std::io::Error::last_os_error().into());
}
let ptr = MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, size);
if ptr.is_null() {
if !valid_handle(ptr as _) {
return Err(std::io::Error::last_os_error().into());
}
Ok(SharedMem {
handle,
view: SharedMemView { ptr, size },
view: SharedMemView {
ptr: ptr as _,
size,
},
})
}
}
pub unsafe fn make_handle(&self) -> Result<PlatformHandle> {
PlatformHandle::duplicate(self.handle).map_err(|e| e.into())
PlatformHandle::duplicate(self.handle as _).map_err(|e| e.into())
}
pub unsafe fn from(handle: PlatformHandle, size: usize) -> Result<SharedMem> {
let handle = handle.into_raw();
let ptr = MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, size);
if ptr.is_null() {
let ptr = MapViewOfFile(handle as _, FILE_MAP_ALL_ACCESS, 0, 0, size);
if !valid_handle(ptr as _) {
return Err(std::io::Error::last_os_error().into());
}
Ok(SharedMem {
handle,
view: SharedMemView { ptr, size },
handle: handle as _,
view: SharedMemView {
ptr: ptr as _,
size,
},
})
}

View file

@ -17,7 +17,7 @@ trait AsBytes {
impl<'a, T: Sized> AsBytes for &'a [T] {
fn as_bytes(&self) -> &[u8] {
// TODO: This should account for the alignment of T
let byte_count = self.len() * mem::size_of::<T>();
let byte_count = std::mem::size_of_val(*self);
unsafe { slice::from_raw_parts(self.as_ptr() as *const _, byte_count) }
}
}

View file

@ -14,7 +14,7 @@ use std::io::Result;
use bytes::{Buf, BufMut};
use mio::windows::NamedPipe;
use winapi::um::winbase::FILE_FLAG_OVERLAPPED;
use windows_sys::Win32::Storage::FileSystem::FILE_FLAG_OVERLAPPED;
use crate::PlatformHandle;

View file

@ -25,8 +25,8 @@ webrender_bindings = { path = "../../../../gfx/webrender_bindings" }
cubeb-coreaudio = { git = "https://github.com/mozilla/cubeb-coreaudio-rs", rev = "93b5c01a131f65c83c11aeb317f4583405c5eb79", optional = true }
cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="cf48897be5cbe147d051ebbbe1eaf5fd8fb6bbc9", optional = true, features=["pulse-dlopen"] }
cubeb-sys = { version = "0.10.3", optional = true, features=["gecko-in-tree"] }
audioipc2-client = { git = "https://github.com/mozilla/audioipc", rev = "0b51291d2483a17dce3e300c7784b369e02bee73", optional = true }
audioipc2-server = { git = "https://github.com/mozilla/audioipc", rev = "0b51291d2483a17dce3e300c7784b369e02bee73", optional = true }
audioipc2-client = { git = "https://github.com/mozilla/audioipc", rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543", optional = true }
audioipc2-server = { git = "https://github.com/mozilla/audioipc", rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543", optional = true }
encoding_glue = { path = "../../../../intl/encoding_glue" }
authrs_bridge = { path = "../../../../dom/webauthn/authrs_bridge" }
gkrust_utils = { path = "../../../../xpcom/rust/gkrust_utils" }