about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/webrtc-pulse.patch
blob: cf24e270419166805f93e36bbaa0cfbd6f170b48 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 704dc99bd05a94eb61202e6127df94ddfd571e85 Mon Sep 17 00:00:00 2001
From: Dale Curtis <dalecurtis@chromium.org>
Date: Mon, 02 Mar 2020 22:12:22 +0000
Subject: [PATCH] Hold PulseAudio mainloop lock while querying input device info.

a22cc23955cb3d58b7525c5103314226b3ce0137 moved this section out of
UpdateNativeAudioHardwareInfo(), but forgot to bring the lock along.

R=guidou

Bug: 1043040
Change-Id: I5b17a2cf0ad55d61c0811db1dae7045af4a91370
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2083814
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Auto-Submit: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746115}
---

diff --git a/media/audio/pulse/audio_manager_pulse.cc b/media/audio/pulse/audio_manager_pulse.cc
index 90e9317..829846f 100644
--- a/media/audio/pulse/audio_manager_pulse.cc
+++ b/media/audio/pulse/audio_manager_pulse.cc
@@ -104,22 +104,27 @@
 
 AudioParameters AudioManagerPulse::GetInputStreamParameters(
     const std::string& device_id) {
-  int user_buffer_size = GetUserBufferSize();
-  int buffer_size =
-      user_buffer_size ? user_buffer_size : kDefaultInputBufferSize;
-
   UpdateNativeAudioHardwareInfo();
-  auto* operation = pa_context_get_source_info_by_name(
-      input_context_, default_source_name_.c_str(), DefaultSourceInfoCallback,
-      this);
-  WaitForOperationCompletion(input_mainloop_, operation, input_context_);
+
+  {
+    AutoPulseLock auto_lock(input_mainloop_);
+    auto* operation = pa_context_get_source_info_by_name(
+        input_context_, default_source_name_.c_str(), DefaultSourceInfoCallback,
+        this);
+    WaitForOperationCompletion(input_mainloop_, operation, input_context_);
+  }
 
   // We don't want to accidentally open a monitor device, so return invalid
-  // parameters for those.
+  // parameters for those. Note: The value of |default_source_is_monitor_|
+  // depends on the the call to pa_context_get_source_info_by_name() above.
   if (device_id == AudioDeviceDescription::kDefaultDeviceId &&
       default_source_is_monitor_) {
     return AudioParameters();
   }
+
+  const int user_buffer_size = GetUserBufferSize();
+  const int buffer_size =
+      user_buffer_size ? user_buffer_size : kDefaultInputBufferSize;
   return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
                          CHANNEL_LAYOUT_STEREO,
                          native_input_sample_rate_ ? native_input_sample_rate_