]> git.sesse.net Git - vlc/blobdiff - src/control/media_player.c
Fixed a race condition with input creation and events.
[vlc] / src / control / media_player.c
index 3eb1c1e94ae51ce339275fbb596f89dd36927032..19dd794043008563943341bc7788a9eb3f678678 100644 (file)
@@ -89,7 +89,7 @@ static void release_input_thread( libvlc_media_player_t *p_mi, bool b_input_abor
                          input_event_changed, p_mi );
 
         /* We owned this one */
-        input_StopThread( p_input_thread, b_input_abort );
+        input_Stop( p_input_thread, b_input_abort );
         vlc_thread_join( p_input_thread );
 
         var_Destroy( p_input_thread, "drawable-hwnd" );
@@ -606,8 +606,8 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
         return;
     }
 
-    p_mi->p_input_thread = input_CreateThread(
-            p_mi->p_libvlc_instance->p_libvlc_int, p_mi->p_md->p_input_item );
+    p_mi->p_input_thread = input_Create( p_mi->p_libvlc_instance->p_libvlc_int,
+                                         p_mi->p_md->p_input_item, NULL, NULL );
 
     if( !p_mi->p_input_thread )
     {
@@ -643,6 +643,12 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
     var_AddCallback( p_input_thread, "can-pause", input_pausable_changed, p_mi );
     var_AddCallback( p_input_thread, "intf-event", input_event_changed, p_mi );
 
+    if( input_Start( p_input_thread ) )
+    {
+        vlc_object_release( p_input_thread );
+        p_mi->p_input_thread = NULL;
+    }
+
     vlc_mutex_unlock( &p_mi->object_lock );
 }
 
@@ -717,7 +723,7 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
         if( !p_input_thread )
             return;
 
-        input_StopThread( p_input_thread, true );
+        input_Stop( p_input_thread, true );
         vlc_object_release( p_input_thread );
         p_mi->p_input_thread = NULL;
     }