]> git.sesse.net Git - vlc/commitdiff
input: Attempt to fix variables deadlocks.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 17 Jun 2008 10:26:00 +0000 (12:26 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 17 Jun 2008 10:27:34 +0000 (12:27 +0200)
src/input/input.c
src/input/input_internal.h

index 2421834cc27fb7df83da29bec950b46a19dddf47..b70115d5e950b755bc0b61b2e1037d185497f86a 100644 (file)
@@ -1550,7 +1550,7 @@ static bool Control( input_thread_t *p_input, int i_type,
                 b_force_update = true;
 
                 /* Switch to play */
-                input_ChangeState( p_input, PLAYING_S);
+                input_ChangeStateWithVarCallback( p_input, PLAYING_S, false );
 
                 /* */
                 if( !i_ret )
@@ -1580,7 +1580,7 @@ static bool Control( input_thread_t *p_input, int i_type,
                 }
 
                 /* Switch to new state */
-                input_ChangeState( p_input, state);
+                input_ChangeStateWithVarCallback( p_input, state, false );
 
                 /* */
                 if( !i_ret )
@@ -1591,7 +1591,7 @@ static bool Control( input_thread_t *p_input, int i_type,
                 b_force_update = true;
 
                 /* Correct "state" value */
-                input_ChangeState( p_input, p_input->i_state );
+                input_ChangeStateWithVarCallback( p_input, p_input->i_state, false );
             }
             else if( val.i_int != PLAYING_S && val.i_int != PAUSE_S )
             {
index 90cb3e952397bae4342c3ea4c9b16460ff00327b..fb271ac34b0a1d94566f6a2c92443ec360e1d96c 100644 (file)
@@ -384,10 +384,17 @@ int subtitles_Filter( const char *);
 
 void MRLSplit( char *, const char **, const char **, char ** );
 
-static inline void input_ChangeState( input_thread_t *p_input, int state )
+static inline void input_ChangeStateWithVarCallback( input_thread_t *p_input, int state, bool callback )
 {
     bool changed = (p_input->i_state != state);
-    var_SetInteger( p_input, "state", p_input->i_state = state );
+    if( callback )
+        var_SetInteger( p_input, "state", p_input->i_state = state );
+    else
+    {
+        vlc_value_t val;
+        val.i_int = PLAYING_S;
+        var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL );
+    }
     if( changed )
     {
         vlc_event_t event;
@@ -397,6 +404,12 @@ static inline void input_ChangeState( input_thread_t *p_input, int state )
     }
 }
 
+static inline void input_ChangeState( input_thread_t *p_input, int state )
+{
+    input_ChangeStateWithVarCallback( p_input, state, true );
+}
+
+
 /* Access */
 
 #define access_New( a, b, c, d ) __access_New(VLC_OBJECT(a), b, c, d )