mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-26 09:21:55 -04:00
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:
committed by
Ryan Foster
co-authored by
Ryan Foster
parent
13d5c007b0
commit
0820d804bc
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user