]> git.sesse.net Git - vlc/commitdiff
Fix refcount issues and only vlc_object_find when needed
authorAntoine Cellerier <dionoea@videolan.org>
Sat, 2 Sep 2006 20:46:57 +0000 (20:46 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Sat, 2 Sep 2006 20:46:57 +0000 (20:46 +0000)
src/video_output/video_output.c

index 886dd4b2ead9e496b769535745373856109f39a7..95332b5d452e1d888bc17bdb4d01bbc1f43ca522 100644 (file)
@@ -743,7 +743,7 @@ static void RunThread( vout_thread_t *p_vout)
 
     subpicture_t *  p_subpic = NULL;                   /* subpicture pointer */
 
-    input_thread_t *p_input = NULL ; /* Parent input, if it exists */
+    input_thread_t *p_input = NULL ;           /* Parent input, if it exists */
 
     vlc_value_t     val;
     vlc_bool_t      b_drop_late;
@@ -780,12 +780,20 @@ static void RunThread( vout_thread_t *p_vout)
         display_date = 0;
         current_date = mdate();
 
-        p_input = NULL;
+        if( p_input && p_input->b_die )
+        {
+            vlc_object_release( p_input );
+            p_input = NULL;
+        }
 
         i_loops++;
         if( i_loops % 20 == 0 )
         {
-            p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT, FIND_PARENT );
+            if( !p_input )
+            {
+                p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT,
+                                           FIND_PARENT );
+            }
             if( p_input )
             {
                 vlc_mutex_lock( &p_input->counters.counters_lock );
@@ -796,7 +804,6 @@ static void RunThread( vout_thread_t *p_vout)
                                      i_displayed , NULL);
                 i_displayed = i_lost = 0;
                 vlc_mutex_unlock( &p_input->counters.counters_lock );
-                vlc_object_release( p_input );
             }
         }
 #if 0
@@ -1045,8 +1052,10 @@ static void RunThread( vout_thread_t *p_vout)
         if( display_date > 0 )
         {
             if( !p_input )
+            {
                 p_input = vlc_object_find( p_vout, VLC_OBJECT_INPUT,
                                            FIND_PARENT );
+            }
             p_subpic = spu_SortSubpictures( p_vout->p_spu, display_date,
             p_input ? var_GetBool( p_input, "state" ) == PAUSE_S : VLC_FALSE );
         }
@@ -1197,6 +1206,11 @@ static void RunThread( vout_thread_t *p_vout)
         }
     }
 
+    if( p_input )
+    {
+        vlc_object_release( p_input );
+    }
+
     /*
      * Error loop - wait until the thread destruction is requested
      */