mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-27 09:46:20 -04:00
libobs: Fix deadlock on executing tasks
This commit is contained in:
+7
-10
@@ -493,18 +493,15 @@ static inline void release_audio_sources(struct obs_core_audio *audio)
|
||||
static inline void execute_audio_tasks(void)
|
||||
{
|
||||
struct obs_core_audio *audio = &obs->audio;
|
||||
bool tasks_remaining = true;
|
||||
|
||||
while (tasks_remaining) {
|
||||
pthread_mutex_lock(&audio->task_mutex);
|
||||
if (audio->tasks.size) {
|
||||
struct obs_task_info info;
|
||||
deque_pop_front(&audio->tasks, &info, sizeof(info));
|
||||
info.task(info.param);
|
||||
}
|
||||
tasks_remaining = !!audio->tasks.size;
|
||||
pthread_mutex_lock(&audio->task_mutex);
|
||||
while (audio->tasks.size) {
|
||||
struct obs_task_info info;
|
||||
deque_pop_front(&audio->tasks, &info, sizeof(info));
|
||||
pthread_mutex_unlock(&audio->task_mutex);
|
||||
info.task(info.param);
|
||||
pthread_mutex_lock(&audio->task_mutex);
|
||||
}
|
||||
pthread_mutex_unlock(&audio->task_mutex);
|
||||
}
|
||||
|
||||
/* In case monitoring and an 'Audio Output Capture' source have the same device, one silences all the monitored
|
||||
|
||||
+7
-10
@@ -957,18 +957,15 @@ extern THREAD_LOCAL bool is_graphics_thread;
|
||||
static void execute_graphics_tasks(void)
|
||||
{
|
||||
struct obs_core_video *video = &obs->video;
|
||||
bool tasks_remaining = true;
|
||||
|
||||
while (tasks_remaining) {
|
||||
pthread_mutex_lock(&video->task_mutex);
|
||||
if (video->tasks.size) {
|
||||
struct obs_task_info info;
|
||||
deque_pop_front(&video->tasks, &info, sizeof(info));
|
||||
info.task(info.param);
|
||||
}
|
||||
tasks_remaining = !!video->tasks.size;
|
||||
pthread_mutex_lock(&video->task_mutex);
|
||||
while (video->tasks.size) {
|
||||
struct obs_task_info info;
|
||||
deque_pop_front(&video->tasks, &info, sizeof(info));
|
||||
pthread_mutex_unlock(&video->task_mutex);
|
||||
info.task(info.param);
|
||||
pthread_mutex_lock(&video->task_mutex);
|
||||
}
|
||||
pthread_mutex_unlock(&video->task_mutex);
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
Reference in New Issue
Block a user