]> git.sesse.net Git - vlc/commitdiff
Do not msleep to wait for a die order.
authorLaurent Aimar <fenrir@videolan.org>
Sun, 7 Sep 2008 20:34:07 +0000 (22:34 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Sun, 7 Sep 2008 20:34:07 +0000 (22:34 +0200)
src/input/input.c

index eaff24057f26ef0514468aa2421b38edb3321902..1feaf8679a1dc65ac4b1581a430d8419213f7a14 100644 (file)
@@ -502,24 +502,20 @@ static void* Run( vlc_object_t *p_this )
     {
         /* If we failed, wait before we are killed, and exit */
         WaitDie( p_input );
-
-        /* Tell we're dead */
-        p_input->b_dead = true;
-
-        vlc_restorecancel( canc );
-        return NULL;
+        goto exit;
     }
 
     MainLoop( p_input );
 
     /* Wait until we are asked to die */
     if( !p_input->b_die )
-    {
         WaitDie( p_input );
-    }
 
     /* Clean up */
     End( p_input );
+
+exit:
+    p_input->b_dead = true;
     vlc_restorecancel( canc );
     return NULL;
 }
@@ -1306,11 +1302,12 @@ error:
 static void WaitDie( input_thread_t *p_input )
 {
     input_ChangeState( p_input, p_input->b_error ? ERROR_S : END_S );
-    while( !p_input->b_die )
-    {
-        /* Sleep a while */
-        msleep( INPUT_IDLE_SLEEP );
-    }
+
+    /* Wait a die order */
+    vlc_object_lock( p_input );
+    while( vlc_object_alive( p_input ) )
+        vlc_object_wait( p_input );
+    vlc_object_unlock( p_input );
 }
 
 /*****************************************************************************