summaryrefslogtreecommitdiffstats
path: root/audio/out/buffer.c
diff options
context:
space:
mode:
authorDudemanguy <random342@airmail.cc>2023-01-12 16:43:44 -0600
committerDudemanguy <random342@airmail.cc>2023-01-13 16:02:38 +0000
commit9a9039deb25c4e3e189f3963b60b2108d35de0f8 (patch)
tree058e5a349bab139a8d4f192c28469b23d17c301e /audio/out/buffer.c
parent95a76f069204946a7e1cd263810c2f170f6fe0e5 (diff)
downloadmpv-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/buffer.c')
-rw-r--r--audio/out/buffer.c22
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);
}