linux-alsa: Fix use-after-free crash when USB mic not plugged in

Co-authored-by: Ryan Foster <ryan@obsproject.com>
This commit is contained in:
R0te
2026-09-22 15:02:52 -04:00
committed by Ryan Foster
co-authored by Ryan Foster
parent 13d5c007b0
commit 0820d804bc
+13
View File
@@ -51,6 +51,7 @@ struct alsa_data {
os_event_t *abort_event;
volatile bool listen;
volatile bool reopen;
volatile bool shutdown;
/* alsa */
snd_pcm_t *handle;
@@ -121,6 +122,7 @@ void *alsa_create(obs_data_t *settings, obs_source_t *source)
data->handle = NULL;
data->listen = false;
data->reopen = false;
data->shutdown = false;
data->listen_thread = 0;
data->reopen_thread = 0;
@@ -154,6 +156,8 @@ void alsa_destroy(void *vptr)
{
struct alsa_data *data = vptr;
os_atomic_set_bool(&data->shutdown, true);
if (data->handle)
_alsa_close(data);
@@ -342,6 +346,9 @@ bool _alsa_try_open(struct alsa_data *data)
{
_alsa_stop_reopen(data);
if (os_atomic_load_bool(&data->shutdown))
return false;
if (_alsa_open(data))
return true;
@@ -352,6 +359,9 @@ bool _alsa_try_open(struct alsa_data *data)
bool _alsa_open(struct alsa_data *data)
{
if (os_atomic_load_bool(&data->shutdown))
return false;
pthread_attr_t attr;
int err;
@@ -501,6 +511,9 @@ bool _alsa_configure(struct alsa_data *data)
void _alsa_start_reopen(struct alsa_data *data)
{
if (os_atomic_load_bool(&data->shutdown))
return;
pthread_attr_t attr;
int err;