video-converter: Only lock the thread pool mutex when running with more than 1 thread
authorSebastian Dröge <sebastian@centricular.com>
Fri, 24 Feb 2017 08:02:28 +0000 (10:02 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 24 Feb 2017 08:02:28 +0000 (10:02 +0200)
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

index 13178a0..b9a3bb5 100644 (file)
@@ -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;