diff --git a/libobs/obs.c b/libobs/obs.c index 0ac5be98e..01f141425 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -225,15 +225,25 @@ static void obs_free_audio(void) static bool obs_init_data(void) { struct obs_data *data = &obs->data; + pthread_mutexattr_t attr; + bool success = false; pthread_mutex_init_value(&obs->data.displays_mutex); - if (pthread_mutex_init(&data->sources_mutex, NULL) != 0) - return false; - if (pthread_mutex_init(&data->displays_mutex, NULL) != 0) + if (pthread_mutexattr_init(&attr) != 0) return false; + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0) + goto fail; + if (pthread_mutex_init(&data->sources_mutex, &attr) != 0) + goto fail; + if (pthread_mutex_init(&data->displays_mutex, &attr) != 0) + goto fail; - return true; + success = true; + +fail: + pthread_mutexattr_destroy(&attr); + return success; } static void obs_free_data(void)