diff options
author | Matt A. Tobin <email@mattatobin.com> | 2019-11-03 14:14:26 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2019-11-03 14:14:26 -0500 |
commit | 1960d6e08a949ceed50e6a18240d40a7ecee879c (patch) | |
tree | 580b06d4df15ff5f8a9c3f20468bf2160ac666e5 /media/libcubeb/prevent-double-free.patch | |
parent | 732fe36241032a1793e09209ccc06cb720225b9e (diff) | |
download | UXP-1960d6e08a949ceed50e6a18240d40a7ecee879c.tar UXP-1960d6e08a949ceed50e6a18240d40a7ecee879c.tar.gz UXP-1960d6e08a949ceed50e6a18240d40a7ecee879c.tar.lz UXP-1960d6e08a949ceed50e6a18240d40a7ecee879c.tar.xz UXP-1960d6e08a949ceed50e6a18240d40a7ecee879c.zip |
Revert "Issue #1267 - Part 1: Update libcubeb to a1200c34."
This reverts commit d162ecbaffe845c9707da5d2f6cab11f343ef00e.
Diffstat (limited to 'media/libcubeb/prevent-double-free.patch')
-rw-r--r-- | media/libcubeb/prevent-double-free.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/media/libcubeb/prevent-double-free.patch b/media/libcubeb/prevent-double-free.patch new file mode 100644 index 000000000..aa5356d7f --- /dev/null +++ b/media/libcubeb/prevent-double-free.patch @@ -0,0 +1,46 @@ +From f82f15635e09aac4f07d2ddac3d53c84b593d911 Mon Sep 17 00:00:00 2001 +From: Paul Adenot <paul@paul.cx> +Date: Mon, 16 Jan 2017 04:49:41 -0800 +Subject: [PATCH 1/1] Prevent double-free when doing an emergency bailout from + the rendering thread. + +This caused gecko bug 1326176. + +This was caused by the fact that we would null out `stm->thread` when in +fact it was still running, so we would delete `stm->emergency_bailout` +twice, because we would return true from `stop_and_join_thread`. +--- + src/cubeb_wasapi.cpp | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/src/cubeb_wasapi.cpp b/src/cubeb_wasapi.cpp +index 63c12ac..2920b5d 100644 +--- a/src/cubeb_wasapi.cpp ++++ b/src/cubeb_wasapi.cpp +@@ -1230,13 +1230,18 @@ bool stop_and_join_render_thread(cubeb_stream * stm) + rv = false; + } + +- LOG("Closing thread."); + +- CloseHandle(stm->thread); +- stm->thread = NULL; ++ // Only attempts to close and null out the thread and event if the ++ // WaitForSingleObject above succeeded, so that calling this function again ++ // attemps to clean up the thread and event each time. ++ if (rv) { ++ LOG("Closing thread."); ++ CloseHandle(stm->thread); ++ stm->thread = NULL; + +- CloseHandle(stm->shutdown_event); +- stm->shutdown_event = 0; ++ CloseHandle(stm->shutdown_event); ++ stm->shutdown_event = 0; ++ } + + return rv; + } +-- +2.7.4 + |