summaryrefslogtreecommitdiffstats
path: root/media/libcubeb/fix-crashes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media/libcubeb/fix-crashes.patch')
-rw-r--r--media/libcubeb/fix-crashes.patch71
1 files changed, 0 insertions, 71 deletions
diff --git a/media/libcubeb/fix-crashes.patch b/media/libcubeb/fix-crashes.patch
deleted file mode 100644
index b23501fcf..000000000
--- a/media/libcubeb/fix-crashes.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-This patch fixes three different crashes, one crash per chunk in this patch,
-in the same order.
-- Bug 1342389
-- Bug 1345147
-- Bug 1347453
-
-diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp
---- a/media/libcubeb/src/cubeb_wasapi.cpp
-+++ b/media/libcubeb/src/cubeb_wasapi.cpp
-@@ -878,16 +878,23 @@ wasapi_stream_render_loop(LPVOID stream)
-
- /* WaitForMultipleObjects timeout can trigger in cases where we don't want to
- treat it as a timeout, such as across a system sleep/wake cycle. Trigger
- the timeout error handling only when the timeout_limit is reached, which is
- reset on each successful loop. */
- unsigned timeout_count = 0;
- const unsigned timeout_limit = 5;
- while (is_playing) {
-+ // We want to check the emergency bailout variable before a
-+ // and after the WaitForMultipleObject, because the handles WaitForMultipleObjects
-+ // is going to wait on might have been closed already.
-+ if (*emergency_bailout) {
-+ delete emergency_bailout;
-+ return 0;
-+ }
- DWORD waitResult = WaitForMultipleObjects(ARRAY_LENGTH(wait_array),
- wait_array,
- FALSE,
- 1000);
- if (*emergency_bailout) {
- delete emergency_bailout;
- return 0;
- }
-@@ -1199,16 +1206,22 @@ bool stop_and_join_render_thread(cubeb_s
- {
- bool rv = true;
- LOG("Stop and join render thread.");
- if (!stm->thread) {
- LOG("No thread present.");
- return true;
- }
-
-+ // If we've already leaked the thread, just return,
-+ // there is not much we can do.
-+ if (!stm->emergency_bailout.load()) {
-+ return false;
-+ }
-+
- BOOL ok = SetEvent(stm->shutdown_event);
- if (!ok) {
- LOG("Destroy SetEvent failed: %lx", GetLastError());
- }
-
- /* Wait five seconds for the rendering thread to return. It's supposed to
- * check its event loop very often, five seconds is rather conservative. */
- DWORD r = WaitForSingleObject(stm->thread, 5000);
-diff --git a/media/libcubeb/update.sh b/media/libcubeb/update.sh
---- a/media/libcubeb/update.sh
-+++ b/media/libcubeb/update.sh
-@@ -66,8 +66,11 @@ fi
- echo "Applying a patch on top of $version"
- patch -p1 < ./wasapi-drift-fix-passthrough-resampler.patch
-
- echo "Applying a patch on top of $version"
- patch -p1 < ./audiounit-drift-fix.patch
-
- echo "Applying a patch on top of $version"
- patch -p1 < ./uplift-wasapi-fixes-aurora.patch
-+
-+echo "Applying a patch on top of $version"
-+patch -p3 < ./fix-crashes.patch