From ba91aa87c6b36d286ef31150ee57484245c26595 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 9 Aug 2024 22:22:09 +0200 Subject: [PATCH] libobs: Ensure encoder is not destroyed prematurely --- libobs/obs-encoder.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index 908ef2993eff3c..1220fe25fc97dc 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -799,6 +799,10 @@ void obs_encoder_stop(obs_encoder_t *encoder, if (!obs_ptr_valid(new_packet, "obs_encoder_stop")) return; + /* Ensure encoder is not destroyed elsewhere before we are done with it + * by adding a reference of our own. */ + obs_encoder_addref(encoder); + pthread_mutex_lock(&encoder->init_mutex); pthread_mutex_lock(&encoder->callbacks_mutex); @@ -818,6 +822,8 @@ void obs_encoder_stop(obs_encoder_t *encoder, if (encoder->destroy_on_stop) obs_encoder_actually_destroy(encoder); + else + obs_encoder_release(encoder); /* Destroying the group all the way back here prevents a race * where destruction of the group can prematurely destroy the @@ -832,12 +838,10 @@ void obs_encoder_stop(obs_encoder_t *encoder, else pthread_mutex_unlock(&group->mutex); } - - /* init_mutex already unlocked */ - return; + } else { + pthread_mutex_unlock(&encoder->init_mutex); + obs_encoder_release(encoder); } - - pthread_mutex_unlock(&encoder->init_mutex); } const char *obs_encoder_get_codec(const obs_encoder_t *encoder)