Closed Bug 1656068 Opened 4 years ago Closed 4 years ago

SUMMARY: ThreadSanitizer: data race /builds/worker/checkouts/gecko/media/webrtc/trunk/webrtc/modules/audio_processing/aec/echo_cancellation.cc:131:43 in webrtc::WebRtcAec_Create()

Categories

(Core :: WebRTC: Audio/Video, defect, P5)

defect

Tracking

()

RESOLVED FIXED
83 Branch
Tracking Status
firefox81 --- wontfix
firefox82 --- wontfix
firefox83 --- fixed

People

(Reporter: intermittent-bug-filer, Assigned: padenot)

References

Details

Attachments

(7 files)

Looks like multiple threads are accessing this:

https://searchfox.org/mozilla-central/rev/cffd9b5302b6b6f51533d895a785b48ff418aec1/media/webrtc/trunk/webrtc/modules/audio_processing/aec/echo_cancellation.cc#102

We did not manage to restore the other stack, and searchfox is having trouble figuring out where this variable is accessed for some reason, possibly because we're accessing a static member variable with "->"? Doing a text search, I don't see anything using this besides WebRtcAec_Create:

https://searchfox.org/mozilla-central/search?q=instance_count&case=true&path=media%2Fwebrtc%2Ftrunk%2Fwebrtc

Looks like more than one thread is calling this.

Assignee: nobody → padenot
The stacks for this one.

The real cause for this is that we're not doing input processing in the graph runner thread, but on the audioipc/audio callback thread. The problem is that we run control messages from the graph runner thread, so we reconfigure the aec from the graph runner thread.

This is all synchronized via the graph runner lock. It would be best however to do everything in the graph runner thread.

Attachment #9167032 - Attachment description: Bug 1656068 - Do the processing for audio input data on the graph runner thread and not the audio callback thread. r?karlt → Bug 1656068 - Do the processing for audio input data on the graph runner thread and not the audio callback thread. r?pehrsons
Pushed by padenot@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/e8dd0a07098b
Do the processing for audio input data on the graph runner thread and not the audio callback thread. r=pehrsons
Status: NEW → RESOLVED
Closed: 4 years ago
Resolution: --- → FIXED
Target Milestone: --- → 81 Branch
Read of size 4 at 0x7fa2380759b0 by thread T77 (mutexes: write M405459446912339208, write M414185342989784144, write M414466817966494856):
  #0 webrtc::WebRtcAec_Create() /builds/worker/checkouts/gecko/media/webrtc/trunk/webrtc/modules/audio_processing/aec/echo_cancellation.cc:131:43 (libxul.so+0x5df666e)
  #1 Canceller /builds/worker/checkouts/gecko/media/webrtc/trunk/webrtc/modules/audio_processing/echo_cancellation_impl.cc:83:14 (libxul.so+0x5e06f68)
  #2 webrtc::EchoCancellationImpl::Initialize(int, unsigned long, unsigned long, unsigned long) /builds/worker/checkouts/gecko/media/webrtc/trunk/webrtc/modules/audio_processing/echo_cancellation_impl.cc:433:32 (libxul.so+0x5e06f68)
  #3 webrtc::EchoCancellationImpl::Enable(bool) /builds/worker/checkouts/gecko/media/webrtc/trunk/webrtc/modules/audio_processing/echo_cancellation_impl.cc:220:5 (libxul.so+0x5e06d6f)
  #4 mozilla::AudioInputProcessing::UpdateAECSettings(bool, bool, webrtc::EchoCancellation::SuppressionLevel, webrtc::EchoControlMobile::RoutingMode) /builds/worker/checkouts/gecko/dom/media/webrtc/MediaEngineWebRTCAudio.cpp:707:5 (libxul.so+0x40f7e22)
  #5 mozilla::MediaEngineWebRTCMicrophoneSource::UpdateAECSettings(bool, bool, webrtc::EchoCancellation::SuppressionLevel, webrtc::EchoControlMobile::RoutingMode)::$_10::operator()() const::Message::Run() /builds/worker/checkouts/gecko/dom/media/webrtc/MediaEngineWebRTCAudio.cpp:189:31 (libxul.so+0x410ac26)
  #6 mozilla::MediaTrackGraphImpl::RunMessagesInQueue() /builds/worker/checkouts/gecko/dom/media/MediaTrackGraph.cpp:1151:20 (libxul.so+0x3d652f8)
  #7 mozilla::MediaTrackGraphImpl::OneIterationImpl(long, long, mozilla::AudioMixer*) /builds/worker/checkouts/gecko/dom/media/MediaTrackGraph.cpp:1394:3 (libxul.so+0x3d672d7)
  #8 mozilla::GraphRunner::Run() /builds/worker/checkouts/gecko/dom/media/GraphRunner.cpp:114:32 (libxul.so+0x3c00f20)
  #9 nsThread::ProcessNextEvent(bool, bool*) /builds/worker/checkouts/gecko/xpcom/threads/nsThread.cpp:1234:14 (libxul.so+0xb23bdb)
  #10 NS_ProcessNextEvent(nsIThread*, bool) /builds/worker/checkouts/gecko/xpcom/threads/nsThreadUtils.cpp:513:10 (libxul.so+0xb28dd2)
  #11 mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate*) /builds/worker/checkouts/gecko/ipc/glue/MessagePump.cpp:302:20 (libxul.so+0x13f586e)
  #12 RunInternal /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:334:10 (libxul.so+0x138429c)
  #13 RunHandler /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:327:3 (libxul.so+0x138429c)
  #14 MessageLoop::Run() /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:309:3 (libxul.so+0x138429c)
  #15 nsThread::ThreadFunc(void*) /builds/worker/checkouts/gecko/xpcom/threads/nsThread.cpp:447:10 (libxul.so+0xb1fc65)
  #16 _pt_root /builds/worker/checkouts/gecko/nsprpub/pr/src/pthreads/ptthread.c:201:5 (libnspr4.so+0x44daf)
Previous write of size 4 at 0x7fa2380759b0 by thread T27:
  [failed to restore the stack]
Location is global 'webrtc::Aec::instance_count' of size 4 at 0x7fa2380759b0 (libxul.so+0x00000b50a9b0)
Mutex M405459446912339208 is already destroyed.
Mutex M414185342989784144 is already destroyed.
Mutex M414466817966494856 is already destroyed.
Thread T77 'GraphRunner' (tid=2755, running) created by main thread at:
  #0 pthread_create /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:967:3 (firefox+0x584eb)
  #1 _PR_CreateThread /builds/worker/checkouts/gecko/nsprpub/pr/src/pthreads/ptthread.c:458:14 (libnspr4.so+0x3bfb3)
  #2 PR_CreateThread /builds/worker/checkouts/gecko/nsprpub/pr/src/pthreads/ptthread.c:533:12 (libnspr4.so+0x308e2)
  #3 nsThread::Init(nsTSubstring<char> const&) /builds/worker/checkouts/gecko/xpcom/threads/nsThread.cpp:659:8 (libxul.so+0xb2122e)
  #4 nsThreadManager::NewNamedThread(nsTSubstring<char> const&, unsigned int, nsIThread**) /builds/worker/checkouts/gecko/xpcom/threads/nsThreadManager.cpp:629:12 (libxul.so+0xb284ca)
  #5 NS_NewNamedThread(nsTSubstring<char> const&, nsIThread**, already_AddRefed<nsIRunnable>, unsigned int) /builds/worker/checkouts/gecko/xpcom/threads/nsThreadUtils.cpp:161:57 (libxul.so+0xb2e958)
  #6 NS_NewNamedThread<12> /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:85:10 (libxul.so+0x3c006a4)
  #7 mozilla::GraphRunner::Create(mozilla::MediaTrackGraphImpl*) /builds/worker/checkouts/gecko/dom/media/GraphRunner.cpp:37:7 (libxul.so+0x3c006a4)
  #8 mozilla::MediaTrackGraphImpl::MediaTrackGraphImpl(mozilla::MediaTrackGraph::GraphDriverType, mozilla::MediaTrackGraph::GraphRunType, int, unsigned int, void const*, mozilla::AbstractThread*) /builds/worker/checkouts/gecko/dom/media/MediaTrackGraph.cpp:3007:26 (libxul.so+0x3d6eee6)
  #9 mozilla::MediaTrackGraph::GetInstance(mozilla::MediaTrackGraph::GraphDriverType, nsPIDOMWindowInner*, int, void const*) /builds/worker/checkouts/gecko/dom/media/MediaTrackGraph.cpp:3146:17 (libxul.so+0x3d6f6ce)
  #10 mozilla::GetUserMediaStreamRunnable::Run() /builds/worker/checkouts/gecko/dom/media/MediaManager.cpp:1199:28 (libxul.so+0x3d36f8e)
  #11 mozilla::RunnableTask::Run() /builds/worker/checkouts/gecko/xpcom/threads/TaskController.cpp:242:16 (libxul.so+0xb0d077)
  #12 mozilla::TaskController::DoExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) /builds/worker/checkouts/gecko/xpcom/threads/TaskController.cpp:512:26 (libxul.so+0xb0a8b5)
  #13 mozilla::TaskController::ExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) /builds/worker/checkouts/gecko/xpcom/threads/TaskController.cpp:371:15 (libxul.so+0xb09546)
  #14 mozilla::TaskController::ProcessPendingMTTask(bool) /builds/worker/checkouts/gecko/xpcom/threads/TaskController.cpp:168:36 (libxul.so+0xb097e4)
  #15 operator() /builds/worker/checkouts/gecko/xpcom/threads/TaskController.cpp:83:37 (libxul.so+0xb10cc4)
  #16 mozilla::detail::RunnableFunction<mozilla::TaskController::InitializeInternal()::$_4>::Run() /builds/worker/workspace/obj-build/dist/include/nsThreadUtils.h:577:5 (libxul.so+0xb10cc4)
  #17 nsThread::ProcessNextEvent(bool, bool*) /builds/worker/checkouts/gecko/xpcom/threads/nsThread.cpp:1234:14 (libxul.so+0xb23970)
  #18 NS_ProcessNextEvent(nsIThread*, bool) /builds/worker/checkouts/gecko/xpcom/threads/nsThreadUtils.cpp:513:10 (libxul.so+0xb28dd2)
  #19 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) /builds/worker/checkouts/gecko/ipc/glue/MessagePump.cpp:87:21 (libxul.so+0x13f4d69)
  #20 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) /builds/worker/checkouts/gecko/ipc/glue/MessagePump.cpp:270:30 (libxul.so+0x13f577b)
  #21 RunInternal /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:334:10 (libxul.so+0x138429c)
  #22 RunHandler /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:327:3 (libxul.so+0x138429c)
  #23 MessageLoop::Run() /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:309:3 (libxul.so+0x138429c)
  #24 nsBaseAppShell::Run() /builds/worker/checkouts/gecko/widget/nsBaseAppShell.cpp:137:27 (libxul.so+0x4925273)
  #25 XRE_RunAppShell() /builds/worker/checkouts/gecko/toolkit/xre/nsEmbedFunctions.cpp:913:20 (libxul.so+0x6560a99)
  #26 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) /builds/worker/checkouts/gecko/ipc/glue/MessagePump.cpp:237:9 (libxul.so+0x13f572a)
  #27 RunInternal /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:334:10 (libxul.so+0x138429c)
  #28 RunHandler /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:327:3 (libxul.so+0x138429c)
  #29 MessageLoop::Run() /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:309:3 (libxul.so+0x138429c)
  #30 XRE_InitChildProcess(int, char**, XREChildData const*) /builds/worker/checkouts/gecko/toolkit/xre/nsEmbedFunctions.cpp:744:34 (libxul.so+0x6560819)
  #31 mozilla::BootstrapImpl::XRE_InitChildProcess(int, char**, XREChildData const*) /builds/worker/checkouts/gecko/toolkit/xre/Bootstrap.cpp:67:12 (libxul.so+0x6568922)
  #32 content_process_main /builds/worker/checkouts/gecko/browser/app/../../ipc/contentproc/plugin-container.cpp:56:28 (firefox+0xca0d7)
  #33 main /builds/worker/checkouts/gecko/browser/app/nsBrowserApp.cpp:303:18 (firefox+0xca0d7)
Thread T27 'AudioIPC0' (tid=2116, running) created by thread T24 at:
  #0 pthread_create /builds/worker/fetches/llvm-project/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:967:3 (firefox+0x584eb)
  #1 std::sys::unix::thread::Thread::new::h77964362e8ddd9a4 /rustc/dd67187965e136bff1ed05e035293441c60f0790/src/libstd/sys/unix/thread.rs:68:19 (libxul.so+0x7e00b41)
  #2 cubeb_backend::capi::capi_init::hc5b21a181ddfb099 /builds/worker/checkouts/gecko/third_party/rust/cubeb-backend/src/capi.rs:68:25 (libxul.so+0x757145f)
  #3 audioipc_client_init /builds/worker/checkouts/gecko/media/audioipc/client/src/lib.rs:83:5 (libxul.so+0x757145f)
  #4 cubeb_backend::capi::capi_init::hc5b21a181ddfb099 /builds/worker/checkouts/gecko/third_party/rust/cubeb-backend/src/capi.rs:68:25 (libxul.so+0x757145f)
  #5 audioipc_client_init /builds/worker/checkouts/gecko/media/audioipc/client/src/lib.rs:83:5 (libxul.so+0x757145f)
  #6 mozilla::CubebUtils::GetCubebContextUnlocked() /builds/worker/checkouts/gecko/dom/media/CubebUtils.cpp:498:9 (libxul.so+0x3b95387)
  #7 mozilla::CubebUtils::GetCubebContext() /builds/worker/checkouts/gecko/dom/media/CubebUtils.cpp:298:10 (libxul.so+0x3b95028)
  #8 mozilla::CubebDeviceEnumerator::CubebDeviceEnumerator() /builds/worker/checkouts/gecko/dom/media/webrtc/CubebDeviceEnumerator.cpp:62:9 (libxul.so+0x40e47a2)
  #9 mozilla::CubebDeviceEnumerator::GetInstance() /builds/worker/checkouts/gecko/dom/media/webrtc/CubebDeviceEnumerator.cpp:30:21 (libxul.so+0x40e4430)
  #10 GetEnumerator /builds/worker/checkouts/gecko/dom/media/webrtc/MediaEngineWebRTC.cpp:32:10 (libxul.so+0x40e6056)
  #11 mozilla::MediaEngineWebRTC::MediaEngineWebRTC(mozilla::MediaEnginePrefs&) /builds/worker/checkouts/gecko/dom/media/webrtc/MediaEngineWebRTC.cpp:45:7 (libxul.so+0x40e6056)
  #12 mozilla::MediaManager::GetBackend() /builds/worker/checkouts/gecko/dom/media/MediaManager.cpp:3340:20 (libxul.so+0x3c72561)
  #13 operator() /builds/worker/checkouts/gecko/dom/media/MediaManager.cpp:1802:30 (libxul.so+0x3d2d5c6)
  #14 mozilla::media::LambdaTask<mozilla::MediaManager::EnumerateRawDevices(unsigned long, mozilla::dom::MediaSourceEnum, mozilla::dom::MediaSourceEnum, mozilla::MediaSinkEnum, mozilla::MediaManager::DeviceEnumerationType, mozilla::MediaManager::DeviceEnumerationType, bool, RefPtr<mozilla::media::Refcountable<nsTArray<RefPtr<mozilla::MediaDevice> > > > const&)::$_67>::Run() /builds/worker/workspace/obj-build/dist/include/mozilla/media/MediaTaskUtils.h:32:5 (libxul.so+0x3d2d5c6)
  #15 mozilla::TaskQueue::Runner::Run() /builds/worker/checkouts/gecko/xpcom/threads/TaskQueue.cpp:158:20 (libxul.so+0xb12f22)
  #16 nsThreadPool::Run() /builds/worker/checkouts/gecko/xpcom/threads/nsThreadPool.cpp:299:14 (libxul.so+0xb2b286)
  #17 nsThread::ProcessNextEvent(bool, bool*) /builds/worker/checkouts/gecko/xpcom/threads/nsThread.cpp:1234:14 (libxul.so+0xb23bdb)
  #18 NS_ProcessNextEvent(nsIThread*, bool) /builds/worker/checkouts/gecko/xpcom/threads/nsThreadUtils.cpp:513:10 (libxul.so+0xb28dd2)
  #19 mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate*) /builds/worker/checkouts/gecko/ipc/glue/MessagePump.cpp:302:20 (libxul.so+0x13f586e)
  #20 RunInternal /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:334:10 (libxul.so+0x138429c)
  #21 RunHandler /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:327:3 (libxul.so+0x138429c)
  #22 MessageLoop::Run() /builds/worker/checkouts/gecko/ipc/chromium/src/base/message_loop.cc:309:3 (libxul.so+0x138429c)
  #23 nsThread::ThreadFunc(void*) /builds/worker/checkouts/gecko/xpcom/threads/nsThread.cpp:447:10 (libxul.so+0xb1fc65)
  #24 _pt_root /builds/worker/checkouts/gecko/nsprpub/pr/src/pthreads/ptthread.c:201:5 (libnspr4.so+0x44daf)

This is still a problem according to :decoder. I'll have another go at it.

Status: RESOLVED → REOPENED
Resolution: FIXED → ---
This is an automated crash issue comment:

Summary: ThreadSanitizer: data race [@ webrtc::WebRtcAec_Create] vs. [@ webrtc::WebRtcAec_Create]
Build version: try revision 795a87bdf14e22f9a68ebe5fdcce1042dedb4465

For detailed crash information, see attachment.

I'm unable to use my mic without sever artifacts and crackling.

I used an online voice recorder and mozregression to pinpoint the issue to this commit, as it stands the microphone issues mean I cannot use firefox.

2020-09-29T11:03:19.431000: INFO : Narrowed integration regression window from [d1735ab1, f3a3edb8] (3 builds) to [d1735ab1, e8dd0a07] (2 builds) (~1 steps left)
2020-09-29T11:03:19.450000: DEBUG : Starting merge handling...
2020-09-29T11:03:19.451000: DEBUG : Using url: https://hg.mozilla.org/integration/autoland/json-pushes?changeset=e8dd0a07098ba86648f246b41528d5c86a52c676&full=1
2020-09-29T11:03:19.451000: DEBUG : redo: attempt 1/3
2020-09-29T11:03:19.452000: DEBUG : redo: retry: calling _default_get with args: ('https://hg.mozilla.org/integration/autoland/json-pushes?changeset=e8dd0a07098ba86648f246b41528d5c86a52c676&full=1',), kwargs: {}, attempt #1
2020-09-29T11:03:19.457000: DEBUG : urllib3.connectionpool: Resetting dropped connection: hg.mozilla.org
2020-09-29T11:03:20.992000: DEBUG : urllib3.connectionpool: https://hg.mozilla.org:443 "GET /integration/autoland/json-pushes?changeset=e8dd0a07098ba86648f246b41528d5c86a52c676&full=1 HTTP/1.1" 200 None
2020-09-29T11:03:21.051000: DEBUG : Found commit message:
Bug 1656068 - Do the processing for audio input data on the graph runner thread and not the audio callback thread. r=pehrsons

Differential Revision: https://phabricator.services.mozilla.com/D85404

2020-09-29T11:03:21.052000: DEBUG : Did not find a branch, checking all integration branches
2020-09-29T11:03:21.057000: INFO : The bisection is done.
2020-09-29T11:03:21.059000: INFO : Stopped

(In reply to admin from comment #14)

I'm unable to use my mic without sever artifacts and crackling.

I used an online voice recorder and mozregression to pinpoint the issue to this commit, as it stands the microphone issues mean I cannot use firefox.

2020-09-29T11:03:19.431000: INFO : Narrowed integration regression window from [d1735ab1, f3a3edb8] (3 builds) to [d1735ab1, e8dd0a07] (2 builds) (~1 steps left)
2020-09-29T11:03:19.450000: DEBUG : Starting merge handling...
2020-09-29T11:03:19.451000: DEBUG : Using url: https://hg.mozilla.org/integration/autoland/json-pushes?changeset=e8dd0a07098ba86648f246b41528d5c86a52c676&full=1
2020-09-29T11:03:19.451000: DEBUG : redo: attempt 1/3
2020-09-29T11:03:19.452000: DEBUG : redo: retry: calling _default_get with args: ('https://hg.mozilla.org/integration/autoland/json-pushes?changeset=e8dd0a07098ba86648f246b41528d5c86a52c676&full=1',), kwargs: {}, attempt #1
2020-09-29T11:03:19.457000: DEBUG : urllib3.connectionpool: Resetting dropped connection: hg.mozilla.org
2020-09-29T11:03:20.992000: DEBUG : urllib3.connectionpool: https://hg.mozilla.org:443 "GET /integration/autoland/json-pushes?changeset=e8dd0a07098ba86648f246b41528d5c86a52c676&full=1 HTTP/1.1" 200 None
2020-09-29T11:03:21.051000: DEBUG : Found commit message:
Bug 1656068 - Do the processing for audio input data on the graph runner thread and not the audio callback thread. r=pehrsons

Differential Revision: https://phabricator.services.mozilla.com/D85404

2020-09-29T11:03:21.052000: DEBUG : Did not find a branch, checking all integration branches
2020-09-29T11:03:21.057000: INFO : The bisection is done.
2020-09-29T11:03:21.059000: INFO : Stopped

Please attach a copy of the raw data from about:support.

(In reply to Christian Holler (:decoder) from comment #12)

This is an automated crash issue comment:

Summary: ThreadSanitizer: data race [@ webrtc::WebRtcAec_Create] vs. [@
webrtc::WebRtcAec_Create]
Build version: try revision 795a87bdf14e22f9a68ebe5fdcce1042dedb4465

For detailed crash information, see attachment.

Indeed, it's possible to have two of those running at once, and this instance_count is a global flag, it needs to be atomic.

Pushed by padenot@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/b2678e1eff71
Make instance_count in echo_cancellation.h atomic, it can be read and written concurrently. r=pehrsons
Status: REOPENED → RESOLVED
Closed: 4 years ago4 years ago
Resolution: --- → FIXED

Change the status for beta to have the same as nightly and release.
For more information, please visit auto_nag documentation.

Regressions: 1667464

We need to back this first patch out asap, everywhere, and then we can figure out something better.

Attachment #9179288 - Attachment description: Bug 1656068 - Backout first patch in 1656068 for breaking bluetooth audio input. r?pehrsons → Bug 1656068 - Backout first patch in 1656068 for breaking bluetooth audio input on Linux/Pulse. r?pehrsons

The reason for this breakage is that pulse calls the cubeb data_callback with very small buffers, that are filled entirely from the scratch buffer. The audio input processing doesn't run, then. This happens only when using bluetooth devices because in handsfree, it's running at 16kHz or 8kHz, and so the number of frames is small, for the same duration.

Pushed by padenot@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/7b50f2418f3d
Backout first patch in 1656068 for breaking bluetooth audio input on Linux/Pulse. r=pehrsons
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Target Milestone: 81 Branch → ---
Status: REOPENED → RESOLVED
Closed: 4 years ago4 years ago
Resolution: --- → FIXED
Target Milestone: --- → 83 Branch
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: