]> git.sesse.net Git - vlc/commitdiff
Timer: remove the static lock
authorRémi Denis-Courmont <remi@remlab.net>
Wed, 13 Oct 2010 16:14:01 +0000 (19:14 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Wed, 13 Oct 2010 16:20:32 +0000 (19:20 +0300)
src/misc/pthread.c

index 12be0a884201fde3a085f77c9e03e524d878184c..fcbf3e754db60243aba2b932b97a5635d0c635fc 100644 (file)
@@ -939,17 +939,17 @@ void vlc_timer_destroy (vlc_timer_t timer)
 void vlc_timer_schedule (vlc_timer_t timer, bool absolute,
                          mtime_t value, mtime_t interval)
 {
-    static vlc_mutex_t lock = VLC_STATIC_MUTEX;
-
-    vlc_mutex_lock (&lock);
     vlc_mutex_lock (&timer->lock);
-    if (timer->value)
+    while (timer->value)
     {
+        vlc_thread_t thread = timer->thread;
+
+        timer->value = 0;
         vlc_mutex_unlock (&timer->lock);
-        vlc_cancel (timer->thread);
-        vlc_join (timer->thread, NULL);
+        vlc_cancel (thread);
+        /* cannot keep the lock during vlc_join X( */
+        vlc_join (thread, NULL);
         vlc_mutex_lock (&timer->lock);
-        timer->value = 0;
     }
     if ((value != 0)
      && (vlc_clone (&timer->thread, vlc_timer_thread, timer,
@@ -959,7 +959,6 @@ void vlc_timer_schedule (vlc_timer_t timer, bool absolute,
         timer->interval = interval;
     }
     vlc_mutex_unlock (&timer->lock);
-    vlc_mutex_unlock (&lock);
 }
 
 /**