diff options
author | Dudemanguy <random342@airmail.cc> | 2023-01-12 16:43:44 -0600 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2023-01-13 16:02:38 +0000 |
commit | 9a9039deb25c4e3e189f3963b60b2108d35de0f8 (patch) | |
tree | 058e5a349bab139a8d4f192c28469b23d17c301e /audio/out | |
parent | 95a76f069204946a7e1cd263810c2f170f6fe0e5 (diff) | |
download | mpv-9a9039deb25c4e3e189f3963b60b2108d35de0f8.tar.bz2 mpv-9a9039deb25c4e3e189f3963b60b2108d35de0f8.tar.xz |
audio: fix crash during uninit on ao_lavc
The buffer state can be null when using --ao=lavc, so just check it
first. Fixes #10175.
Diffstat (limited to 'audio/out')
-rw-r--r-- | audio/out/buffer.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/audio/out/buffer.c b/audio/out/buffer.c index bb681a9f1d..673ec7a84e 100644 --- a/audio/out/buffer.c +++ b/audio/out/buffer.c @@ -459,7 +459,7 @@ void ao_uninit(struct ao *ao) { struct buffer_state *p = ao->buffer_state; - if (p->thread_valid) { + if (p && p->thread_valid) { pthread_mutex_lock(&p->pt_lock); p->terminate = true; pthread_cond_broadcast(&p->pt_wakeup); @@ -472,17 +472,19 @@ void ao_uninit(struct ao *ao) if (ao->driver_initialized) ao->driver->uninit(ao); - talloc_free(p->filter_root); - talloc_free(p->queue); - talloc_free(p->pending); - talloc_free(p->convert_buffer); - talloc_free(p->temp_buf); + if (p) { + talloc_free(p->filter_root); + talloc_free(p->queue); + talloc_free(p->pending); + talloc_free(p->convert_buffer); + talloc_free(p->temp_buf); - pthread_cond_destroy(&p->wakeup); - pthread_mutex_destroy(&p->lock); + pthread_cond_destroy(&p->wakeup); + pthread_mutex_destroy(&p->lock); - pthread_cond_destroy(&p->pt_wakeup); - pthread_mutex_destroy(&p->pt_lock); + pthread_cond_destroy(&p->pt_wakeup); + pthread_mutex_destroy(&p->pt_lock); + } talloc_free(ao); } |