]> git.sesse.net Git - vlc/commitdiff
ncurses: fix exit
authorRafaël Carré <funman@videolan.org>
Wed, 17 Dec 2014 17:39:29 +0000 (18:39 +0100)
committerRafaël Carré <funman@videolan.org>
Wed, 17 Dec 2014 17:39:29 +0000 (18:39 +0100)
Closes #11877

configure.ac
modules/gui/ncurses.c

index d3484e71474f07720cf150763fd01021d0c09321..53ea4093fb85f34a8a62d6d1183262a3ba3ea956 100644 (file)
@@ -3792,7 +3792,7 @@ AS_IF([test "${enable_ncurses}" != "no"] ,[
   PKG_CHECK_MODULES([NCURSES], [ncursesw], [
     VLC_ADD_PLUGIN([ncurses])
     VLC_ADD_CFLAGS([ncurses],[${NCURSES_CFLAGS}])
-    VLC_ADD_LIBS([ncurses],[${NCURSES_LIBS}])
+    VLC_ADD_LIBS([ncurses],[${NCURSES_LIBS} ${LIBPTHREAD}])
     ALIASES="${ALIASES} nvlc"
   ], [
     AS_IF([test -n "${enable_ncurses}"], [
index daaa32306955ec6acf10f2ce797a67287105d024..d64afd648ffefc9ad1dd0fad74ae074f32c3f57e 100644 (file)
@@ -1795,6 +1795,15 @@ static inline void UpdateInput(intf_sys_t *sys, playlist_t *p_playlist)
     }
 }
 
+static void cleanup_run(void *data)
+{
+    intf_thread_t *intf = data;
+    playlist_t *p_playlist = pl_Get(intf);
+    var_DelCallback(p_playlist, "intf-change", PlaylistChanged, intf);
+    var_DelCallback(p_playlist, "item-change", ItemChanged, intf);
+    var_DelCallback(p_playlist, "playlist-item-append", PlaylistChanged, intf);
+}
+
 /*****************************************************************************
  * Run: ncurses thread
  *****************************************************************************/
@@ -1808,15 +1817,14 @@ static void *Run(void *data)
     var_AddCallback(p_playlist, "item-change", ItemChanged, intf);
     var_AddCallback(p_playlist, "playlist-item-append", PlaylistChanged, intf);
 
+    vlc_cleanup_push(cleanup_run, data);
     while (!sys->exit) {
         UpdateInput(sys, p_playlist);
         Redraw(intf);
         HandleKey(intf);
     }
+    vlc_cleanup_pop();
 
-    var_DelCallback(p_playlist, "intf-change", PlaylistChanged, intf);
-    var_DelCallback(p_playlist, "item-change", ItemChanged, intf);
-    var_DelCallback(p_playlist, "playlist-item-append", PlaylistChanged, intf);
     return NULL;
 }
 
@@ -1881,6 +1889,7 @@ static void Close(vlc_object_t *p_this)
 {
     intf_sys_t *sys = ((intf_thread_t*)p_this)->p_sys;
 
+    vlc_cancel(sys->thread);
     vlc_join(sys->thread, NULL);
 
     PlaylistDestroy(sys);