]> git.sesse.net Git - vlc/commitdiff
Don't reregister the same callbacks over and over again
authorRémi Denis-Courmont <rem@videolan.org>
Wed, 7 May 2008 18:37:29 +0000 (21:37 +0300)
committerRémi Denis-Courmont <rem@videolan.org>
Wed, 7 May 2008 18:37:29 +0000 (21:37 +0300)
modules/gui/ncurses.c

index ce9f031536cdbe1f73a88bb0cc38b5eba92e557a..18093486f6cd11543f013404ed6f71675154bfc7 100644 (file)
@@ -108,6 +108,10 @@ static void ManageSlider   ( intf_thread_t * );
 static void ReadDir        ( intf_thread_t * );
 
 static void start_color_and_pairs ( intf_thread_t * );
+static playlist_t *pl_Get( intf_thread_t *p_intf )
+{
+    return p_intf->p_sys->p_playlist;
+}
 
 /*****************************************************************************
  * Module descriptor
@@ -180,6 +184,7 @@ struct pl_item_t
 struct intf_sys_t
 {
     input_thread_t *p_input;
+    playlist_t     *p_playlist;
 
     bool      b_color;
     bool      b_color_started;
@@ -335,12 +340,8 @@ static void Close( vlc_object_t *p_this )
 {
     intf_thread_t *p_intf = (intf_thread_t *)p_this;
     intf_sys_t    *p_sys = p_intf->p_sys;
-    playlist_t    *p_playlist = pl_Get( p_intf );
     int i;
 
-    var_DelCallback( p_playlist, "intf-change", PlaylistChanged, p_intf );
-    var_DelCallback( p_playlist, "item-append", PlaylistChanged, p_intf );
-
     PlaylistDestroy( p_intf );
 
     for( i = 0; i < p_sys->i_dir_entries; i++ )
@@ -384,6 +385,7 @@ static void Run( intf_thread_t *p_intf )
 {
     intf_sys_t    *p_sys = p_intf->p_sys;
     playlist_t    *p_playlist = pl_Yield( p_intf );
+    p_sys->p_playlist = p_playlist;
 
     int i_key;
     time_t t_last_refresh;
@@ -396,15 +398,14 @@ static void Run( intf_thread_t *p_intf )
      * force building of the playlist array
      */
     PlaylistRebuild( p_intf );
+    var_AddCallback( p_playlist, "intf-change", PlaylistChanged, p_intf );
+    var_AddCallback( p_playlist, "item-append", PlaylistChanged, p_intf );
 
     while( !intf_ShouldDie( p_intf ) )
     {
         msleep( INTF_IDLE_SLEEP );
 
         /* Update the input */
-        var_AddCallback( p_playlist, "intf-change", PlaylistChanged, p_intf );
-        var_AddCallback( p_playlist, "item-append", PlaylistChanged, p_intf );
-
         PL_LOCK;
         if( p_sys->p_input == NULL )
         {
@@ -458,6 +459,8 @@ static void Run( intf_thread_t *p_intf )
             Redraw( p_intf, &t_last_refresh );
         }
     }
+    var_DelCallback( p_playlist, "intf-change", PlaylistChanged, p_intf );
+    var_DelCallback( p_playlist, "item-append", PlaylistChanged, p_intf );
 }
 
 /* following functions are local */