Changeset 6eaafb0
- Timestamp:
- Mar 25, 2011, 3:55:41 AM (14 years ago)
- Children:
- 111850c
- Parents:
- 2314693
- git-author:
- David Benjamin <davidben@mit.edu> (03/02/11 13:34:33)
- git-committer:
- David Benjamin <davidben@mit.edu> (03/25/11 03:55:41)
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
owl.c
r567de81 r6eaafb0 631 631 /* Shut down everything. */ 632 632 owl_zephyr_shutdown(); 633 owl_signal_shutdown(); 633 634 owl_shutdown_curses(); 634 635 return 0; -
signal.c
rf3b5dc8 r6eaafb0 1 #include <glib.h>2 1 #include <errno.h> 3 2 #include <pthread.h> … … 6 5 #include <stdlib.h> 7 6 8 static GThread *signal_thread;7 static pthread_t signal_thread; 9 8 static sigset_t signal_set; 10 9 … … 12 11 static void *signal_cbdata; 13 12 14 static gpointer signal_thread_func(gpointerdata);13 static void *signal_thread_func(void *data); 15 14 16 15 /* Initializes the signal thread to listen for 'set' on a dedicated … … 21 20 * created. (Otherwise the signals will not get blocked correctly.) */ 22 21 void owl_signal_init(const sigset_t *set, void (*callback)(int, void*), void *data) { 23 GError *error = NULL;24 22 int ret; 25 23 … … 33 31 } 34 32 /* Spawn a dedicated thread to sigwait. */ 35 signal_thread = g_thread_create(signal_thread_func, NULL, FALSE, &error); 36 if (signal_thread == NULL) { 37 fprintf(stderr, "Failed to create signal thread: %s\n", error->message); 33 if ((ret = pthread_create(&signal_thread, NULL, 34 signal_thread_func, NULL)) != 0) { 35 errno = ret; 36 perror("pthread_create"); 38 37 exit(1); 39 38 } 40 39 } 41 40 42 static gpointer signal_thread_func(gpointerdata) {41 static void *signal_thread_func(void *data) { 43 42 while (1) { 44 43 int signal; … … 51 50 52 51 signal_cb(signal, signal_cbdata); 52 /* Die on SIGTERM. */ 53 if (signal == SIGTERM) 54 break; 53 55 } 54 56 return NULL; 55 57 } 58 59 void owl_signal_shutdown(void) { 60 pthread_kill(signal_thread, SIGTERM); 61 pthread_join(signal_thread, NULL); 62 }
Note: See TracChangeset
for help on using the changeset viewer.