From nobody Sun Nov 07 23:27:14 2021 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 283101845CB6; Sun, 7 Nov 2021 23:27:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HnVl70f6vz4dMn; Sun, 7 Nov 2021 23:27:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E9BF827040; Sun, 7 Nov 2021 23:27:14 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1A7NREW5086395; Sun, 7 Nov 2021 23:27:14 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1A7NREsQ086394; Sun, 7 Nov 2021 23:27:14 GMT (envelope-from git) Date: Sun, 7 Nov 2021 23:27:14 GMT Message-Id: <202111072327.1A7NREsQ086394@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Christoph Moench-Tegeder Subject: git: 2af447c8bac1 - main - www/firefox: attempt to fix mic on pulseaudio List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cmt X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2af447c8bac175a02de64aad1e36ad849df2f57f Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by cmt: URL: https://cgit.FreeBSD.org/ports/commit/?id=2af447c8bac175a02de64aad1e36ad849df2f57f commit 2af447c8bac175a02de64aad1e36ad849df2f57f Author: Christoph Moench-Tegeder AuthorDate: 2021-11-07 23:22:06 +0000 Commit: Christoph Moench-Tegeder CommitDate: 2021-11-07 23:22:06 +0000 www/firefox: attempt to fix mic on pulseaudio careful testing revealed that the microphone worked "sometimes", with the "not working" state manifesting as follows: pulseaudio sees a signal from the microphone but firefox (and it's components) fails to show up on pulseaudio's source-outputs and firefox gets no audio signal. Applying the patch from upstream 1735905 seems to improve matters greatly. PR: 257639 Reported by: many Obtained from: https://bugzilla.mozilla.org/show_bug.cgi?id=1735905 --- www/firefox/Makefile | 1 + www/firefox/files/patch-bug1735905 | 165 +++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) diff --git a/www/firefox/Makefile b/www/firefox/Makefile index faa1c224a034..43f16f45336d 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -2,6 +2,7 @@ PORTNAME= firefox DISTVERSION= 94.0.1 +PORTREVISION= 1 PORTEPOCH= 2 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ diff --git a/www/firefox/files/patch-bug1735905 b/www/firefox/files/patch-bug1735905 new file mode 100644 index 000000000000..93f44e30149a --- /dev/null +++ b/www/firefox/files/patch-bug1735905 @@ -0,0 +1,165 @@ +commit 0cc5c4b32ed3e0686b4737851fa3df542f60ab3c +Author: Mike Hommey +Date: Sat Oct 16 01:19:56 2021 +0000 + + Bug 1735905 - Upgrade cubeb-pulse to fix a race condition that can lead to shutdown deadlock. r=kinetik + + Differential Revision: https://phabricator.services.mozilla.com/D128657 + +diff --git .cargo/config.in .cargo/config.in +index 9f24c14e6bfa..d8164982b771 100644 +--- .cargo/config.in ++++ .cargo/config.in +@@ -25,7 +25,7 @@ rev = "fd02134161505f978e132114cbabdac057ce3b71" + [source."https://github.com/mozilla/cubeb-pulse-rs"] + git = "https://github.com/mozilla/cubeb-pulse-rs" + replace-with = "vendored-sources" +-rev = "e9e55a4529642da99e64452467ecaef9f7753531" ++rev = "9695281319fcb3e40db6a32cc0661548d6192f4d" + + [source."https://github.com/mozilla/cubeb-coreaudio-rs"] + git = "https://github.com/mozilla/cubeb-coreaudio-rs" +diff --git Cargo.lock Cargo.lock +index 28b79434ff31..8c06309790be 100644 +--- Cargo.lock ++++ Cargo.lock +@@ -1059,7 +1059,7 @@ dependencies = [ + [[package]] + name = "cubeb-pulse" + version = "0.3.0" +-source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=e9e55a4529642da99e64452467ecaef9f7753531#e9e55a4529642da99e64452467ecaef9f7753531" ++source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=9695281319fcb3e40db6a32cc0661548d6192f4d#9695281319fcb3e40db6a32cc0661548d6192f4d" + dependencies = [ + "cubeb-backend", + "pulse", +@@ -3935,7 +3935,7 @@ dependencies = [ + [[package]] + name = "pulse" + version = "0.3.0" +-source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=e9e55a4529642da99e64452467ecaef9f7753531#e9e55a4529642da99e64452467ecaef9f7753531" ++source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=9695281319fcb3e40db6a32cc0661548d6192f4d#9695281319fcb3e40db6a32cc0661548d6192f4d" + dependencies = [ + "bitflags", + "pulse-ffi", +@@ -3944,7 +3944,7 @@ dependencies = [ + [[package]] + name = "pulse-ffi" + version = "0.1.0" +-source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=e9e55a4529642da99e64452467ecaef9f7753531#e9e55a4529642da99e64452467ecaef9f7753531" ++source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=9695281319fcb3e40db6a32cc0661548d6192f4d#9695281319fcb3e40db6a32cc0661548d6192f4d" + dependencies = [ + "libc", + ] +diff --git third_party/rust/cubeb-pulse/.cargo-checksum.json third_party/rust/cubeb-pulse/.cargo-checksum.json +index 1dc452bcf480..45e913931336 100644 +--- third_party/rust/cubeb-pulse/.cargo-checksum.json ++++ third_party/rust/cubeb-pulse/.cargo-checksum.json +@@ -1 +1 @@ +-{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".github/workflows/build.yml":"95d0d2542c04f0c932f58591b92c3051db5c95657bf5f24b6a6110f7b667568d","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"56e90cb82ec36ead07e551a28fc2455fa658fa8308c3d73f8d856d85bfcd2122","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","src/backend/context.rs":"8969b300850b56ace07abe570940e2099774bf0bf20325be1d3ec0f5f408c8ce","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","src/backend/mod.rs":"d5da05348bf1a7f65c85b14372964a49dc4849f0aee96c75e2c18b51fb03fcaf","src/backend/stream.rs":"b17829f1b65055ada69454d0714dd7526d4d5cdeda7bba4ee03ffb6f27297e61","src/capi.rs":"fa0fa020f0d0efe55aa0f c3596405e8407bbe2cbe6c7a558345304e6da87994e","src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5"},"package":null} +\ No newline at end of file ++{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".github/workflows/build.yml":"95d0d2542c04f0c932f58591b92c3051db5c95657bf5f24b6a6110f7b667568d","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"56e90cb82ec36ead07e551a28fc2455fa658fa8308c3d73f8d856d85bfcd2122","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","src/backend/context.rs":"8969b300850b56ace07abe570940e2099774bf0bf20325be1d3ec0f5f408c8ce","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","src/backend/mod.rs":"d5da05348bf1a7f65c85b14372964a49dc4849f0aee96c75e2c18b51fb03fcaf","src/backend/stream.rs":"585b616d5487c77f6aa21a76aa6a0f7ae9de8c389bc908401a979fba8bf3450f","src/capi.rs":"fa0fa020f0d0efe55aa0f c3596405e8407bbe2cbe6c7a558345304e6da87994e","src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5"},"package":null} +\ No newline at end of file +diff --git third_party/rust/cubeb-pulse/src/backend/stream.rs third_party/rust/cubeb-pulse/src/backend/stream.rs +index 8168c813e243..df64b0f2304e 100644 +--- third_party/rust/cubeb-pulse/src/backend/stream.rs ++++ third_party/rust/cubeb-pulse/src/backend/stream.rs +@@ -15,7 +15,7 @@ use ringbuf::RingBuffer; + use std::ffi::{CStr, CString}; + use std::os::raw::{c_long, c_void}; + use std::slice; +-use std::sync::atomic::{AtomicUsize, Ordering}; ++use std::sync::atomic::{AtomicPtr, AtomicUsize, Ordering}; + use std::{mem, ptr}; + + use self::LinearInputBuffer::*; +@@ -272,7 +272,7 @@ pub struct PulseStream<'ctx> { + input_stream: Option, + data_callback: ffi::cubeb_data_callback, + state_callback: ffi::cubeb_state_callback, +- drain_timer: *mut pa_time_event, ++ drain_timer: AtomicPtr, + output_sample_spec: pulse::SampleSpec, + input_sample_spec: pulse::SampleSpec, + // output frames count excluding pre-buffering +@@ -411,7 +411,7 @@ impl<'ctx> PulseStream<'ctx> { + data_callback, + state_callback, + user_ptr, +- drain_timer: ptr::null_mut(), ++ drain_timer: AtomicPtr::new(ptr::null_mut()), + output_sample_spec: pulse::SampleSpec::default(), + input_sample_spec: pulse::SampleSpec::default(), + output_frame_count: AtomicUsize::new(0), +@@ -574,9 +574,10 @@ impl<'ctx> PulseStream<'ctx> { + self.context.mainloop.lock(); + { + if let Some(stm) = self.output_stream.take() { +- if !self.drain_timer.is_null() { ++ let drain_timer = self.drain_timer.load(Ordering::Acquire); ++ if !drain_timer.is_null() { + /* there's no pa_rttime_free, so use this instead. */ +- self.context.mainloop.get_api().time_free(self.drain_timer); ++ self.context.mainloop.get_api().time_free(drain_timer); + } + stm.clear_state_callback(); + stm.clear_write_callback(); +@@ -637,7 +638,7 @@ impl<'ctx> StreamOps for PulseStream<'ctx> { + self.shutdown = true; + // If draining is taking place wait to finish + cubeb_log!("Stream stop: waiting for drain."); +- while !self.drain_timer.is_null() { ++ while !self.drain_timer.load(Ordering::Acquire).is_null() { + self.context.mainloop.wait(); + } + cubeb_log!("Stream stop: waited for drain."); +@@ -988,11 +989,12 @@ impl<'ctx> PulseStream<'ctx> { + ) { + cubeb_logv!("Drain finished callback."); + let stm = unsafe { &mut *(u as *mut PulseStream) }; +- debug_assert_eq!(stm.drain_timer, e); ++ let drain_timer = stm.drain_timer.load(Ordering::Acquire); ++ debug_assert_eq!(drain_timer, e); + stm.state_change_callback(ffi::CUBEB_STATE_DRAINED); + /* there's no pa_rttime_free, so use this instead. */ +- a.time_free(stm.drain_timer); +- stm.drain_timer = ptr::null_mut(); ++ a.time_free(drain_timer); ++ stm.drain_timer.store(ptr::null_mut(), Ordering::Release); + stm.context.mainloop.signal(); + } + +@@ -1109,13 +1111,16 @@ impl<'ctx> PulseStream<'ctx> { + + /* pa_stream_drain is useless, see PA bug# 866. this is a workaround. */ + /* arbitrary safety margin: double the current latency. */ +- debug_assert!(self.drain_timer.is_null()); ++ debug_assert!(self.drain_timer.load(Ordering::Acquire).is_null()); + let stream_ptr = self as *const _ as *mut _; + if let Some(ref context) = self.context.context { +- self.drain_timer = context.rttime_new( +- pulse::rtclock_now() + 2 * latency, +- drained_cb, +- stream_ptr, ++ self.drain_timer.store( ++ context.rttime_new( ++ pulse::rtclock_now() + 2 * latency, ++ drained_cb, ++ stream_ptr, ++ ), ++ Ordering::Release, + ); + } + self.shutdown = true; +diff --git toolkit/library/rust/shared/Cargo.toml toolkit/library/rust/shared/Cargo.toml +index 39f309e2ad4a..cdb568aa7428 100644 +--- toolkit/library/rust/shared/Cargo.toml ++++ toolkit/library/rust/shared/Cargo.toml +@@ -20,7 +20,7 @@ profiler_helper = { path = "../../../../tools/profiler/rust-helper", optional = + mozurl = { path = "../../../../netwerk/base/mozurl" } + webrender_bindings = { path = "../../../../gfx/webrender_bindings" } + cubeb-coreaudio = { git = "https://github.com/mozilla/cubeb-coreaudio-rs", rev = "4ee3b283182926f9a8bb31d603219ff2db70d2fd", optional = true } +-cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="e9e55a4529642da99e64452467ecaef9f7753531", optional = true, features=["pulse-dlopen"] } ++cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="9695281319fcb3e40db6a32cc0661548d6192f4d", optional = true, features=["pulse-dlopen"] } + cubeb-sys = { version = "0.9", optional = true, features=["gecko-in-tree"] } + encoding_glue = { path = "../../../../intl/encoding_glue" } + audioipc-client = { git = "https://github.com/mozilla/audioipc-2", rev = "03868a0eaf1d46e895353fa6e1f5bcaf7e588e62", optional = true }