Changeset 08e9842
- Timestamp:
- May 23, 2011, 8:57:46 PM (14 years ago)
- Branches:
- master, release-1.10, release-1.8, release-1.9
- Children:
- dc1edbd
- Parents:
- 6bd485e
- git-author:
- David Benjamin <davidben@mit.edu> (03/02/11 13:34:33)
- git-committer:
- David Benjamin <davidben@mit.edu> (05/23/11 20:57:46)
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
owl.c
r6bd485e r08e9842 620 620 /* Shut down everything. */ 621 621 owl_zephyr_shutdown(); 622 owl_signal_shutdown(); 622 623 owl_shutdown_curses(); 623 624 return 0; -
signal.c
r6bd485e r08e9842 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.