From 6d20fcc9df240f3b289c9d70b5624fadd745bfad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 24 Feb 2017 10:02:28 +0200 Subject: [PATCH] video-converter: Only lock the thread pool mutex when running with more than 1 thread There's no reason to lock anything if only the current thread is ever going to do any work. --- gst-libs/gst/video/video-converter.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/gst-libs/gst/video/video-converter.c b/gst-libs/gst/video/video-converter.c index 13178a060e..b9a3bb5db2 100644 --- a/gst-libs/gst/video/video-converter.c +++ b/gst-libs/gst/video/video-converter.c @@ -291,22 +291,28 @@ static void gst_parallelized_task_runner_run (GstParallelizedTaskRunner * self, GstParallelizedTaskFunc func, gpointer * task_data) { + guint n_threads = self->n_threads; + self->func = func; self->task_data = task_data; - g_mutex_lock (&self->lock); - self->n_todo = self->n_threads - 2; - self->n_done = 0; - g_cond_broadcast (&self->cond_todo); - g_mutex_unlock (&self->lock); + if (n_threads > 1) { + g_mutex_lock (&self->lock); + self->n_todo = self->n_threads - 2; + self->n_done = 0; + g_cond_broadcast (&self->cond_todo); + g_mutex_unlock (&self->lock); + } self->func (self->task_data[self->n_threads - 1]); - g_mutex_lock (&self->lock); - while (self->n_done < self->n_threads - 1) - g_cond_wait (&self->cond_done, &self->lock); - self->n_done = 0; - g_mutex_unlock (&self->lock); + if (n_threads > 1) { + g_mutex_lock (&self->lock); + while (self->n_done < self->n_threads - 1) + g_cond_wait (&self->cond_done, &self->lock); + self->n_done = 0; + g_mutex_unlock (&self->lock); + } self->func = NULL; self->task_data = NULL;