diff -dPNur xmms-1.2.10/xmms/main.c xmms-1.2.10-new/xmms/main.c --- xmms-1.2.10/xmms/main.c 2004-02-23 20:31:43.000000000 +0000 +++ xmms-1.2.10-new/xmms/main.c 2005-12-29 02:51:06.000000000 +0000 @@ -3017,6 +3017,8 @@ } +static sig_atomic_t exit_flag = 0; + gint idle_func(gpointer data) { gint time, t, length; @@ -3026,6 +3028,8 @@ static GTimer *pause_timer = NULL; + if (exit_flag) mainwin_quit_cb(); + if (get_input_playing()) { GDK_THREADS_ENTER(); @@ -3390,6 +3394,12 @@ exit(1); } +/* Try to exit nicely when receiving a nice exit signal */ +void sigterm_handler(int sig) +{ + exit_flag = 1; +} + static gboolean pposition_configure(GtkWidget *w, GdkEventConfigure *event, gpointer data) { gint x,y; @@ -3521,6 +3531,8 @@ #endif signal(SIGPIPE, SIG_IGN); /* for controlsocket.c */ + signal(SIGTERM, sigterm_handler); + signal(SIGINT, sigterm_handler); signal(SIGSEGV, segfault_handler); g_thread_init(NULL); gtk_set_locale();