72 lines
2.5 KiB
Diff
72 lines
2.5 KiB
Diff
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
|