$OpenBSD: patch-src_xitk_xine-toolkit_xitk_c,v 1.4 2013/04/29 02:36:23 brad Exp $

- Fix segfaults in signal handler.
- Fix shutdown race.

--- src/xitk/xine-toolkit/xitk.c.orig	Thu Jan 19 06:04:00 2012
+++ src/xitk/xine-toolkit/xitk.c	Sat Apr 27 19:37:39 2013
@@ -337,14 +337,16 @@ int xitk_uninstall_x_error_handler(void) {
 static void xitk_signal_handler(int sig) {
   pid_t cur_pid = getppid();
 
-  /* First, call registered handler */
-  if(cur_pid == xitk_pid) {
-    if(gXitk->sig_callback)
-      gXitk->sig_callback(sig, gXitk->sig_data);
-  }
+  if (gXitk) {
+    /* First, call registered handler */
+    if(cur_pid == xitk_pid) {
+      if(gXitk->sig_callback)
+        gXitk->sig_callback(sig, gXitk->sig_data);
+    }
   
-  gXitk->running = 0;
-  
+    gXitk->running = 0;
+  }
+
   switch (sig) {
     
   case SIGINT:
@@ -352,11 +354,13 @@ static void xitk_signal_handler(int sig) {
   case SIGQUIT:
     if(cur_pid == xitk_pid) {
       
-      xitk_list_free(gXitk->list);
-      xitk_list_free(gXitk->gfx);
-      xitk_config_deinit(gXitk->config);
+      if (gXitk) {
+        xitk_list_free(gXitk->list);
+        xitk_list_free(gXitk->gfx);
+        xitk_config_deinit(gXitk->config);
       
-      XITK_FREE(gXitk);
+        XITK_FREE(gXitk);
+      }
       exit(1);
     }
     break;
@@ -2112,6 +2116,9 @@ void xitk_run(xitk_startup_callback_t cb, void *data) 
     tv.tv_usec = 33000;
 
     select(xconnection + 1, &r, 0, 0, &tv);
+
+    if(!gXitk->running)
+      break;
     
     XLOCK(gXitk->display);
     got_event = (XPending(gXitk->display) != 0);
@@ -2122,6 +2129,9 @@ void xitk_run(xitk_startup_callback_t cb, void *data) 
     while(got_event == True) {
 
       xitk_xevent_notify(&myevent);
+
+      if(!gXitk->running)
+        break;
 
       XLOCK(gXitk->display);
       got_event = (XPending(gXitk->display) != 0);
