Changeset 47128d9
- Timestamp:
- May 23, 2011, 8:57:46 PM (14 years ago)
- Branches:
- master, release-1.10, release-1.8, release-1.9
- Children:
- 6bd485e
- Parents:
- 1491439
- git-author:
- David Benjamin <davidben@mit.edu> (02/26/11 14:38:04)
- git-committer:
- David Benjamin <davidben@mit.edu> (05/23/11 20:57:46)
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
functions.c
r3535a6e r47128d9 2995 2995 i--; 2996 2996 } 2997 #if 0 2998 /* FIXME!!! */ 2999 owl_function_mask_sigint(NULL); 3000 if(owl_global_is_interrupted(&g)) { 3001 owl_global_unset_interrupted(&g); 3002 owl_function_unmask_sigint(NULL); 2997 if (owl_global_take_interrupt(&g)) { 3003 2998 owl_function_makemsg("Search interrupted!"); 3004 2999 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); 3005 3000 return; 3006 3001 } 3007 owl_function_unmask_sigint(NULL);3008 #endif3009 3002 } 3010 3003 owl_mainwin_redisplay(owl_global_get_mainwin(&g)); … … 3089 3082 ret=ZLocateUser(zstr(user), &numlocs, ZAUTH); 3090 3083 3091 #if 0 3092 /* FIXME!! */ 3093 owl_function_mask_sigint(NULL); 3094 if(owl_global_is_interrupted(&g)) { 3084 if (owl_global_take_interrupt(&g)) { 3095 3085 interrupted = 1; 3096 owl_global_unset_interrupted(&g);3097 owl_function_unmask_sigint(NULL);3098 3086 owl_function_makemsg("Interrupted!"); 3099 3087 break; 3100 3088 } 3101 3102 owl_function_unmask_sigint(NULL);3103 #endif3104 3089 3105 3090 if (ret!=ZERR_NONE) { … … 3506 3491 } 3507 3492 3508 void owl_function_mask_sigint(sigset_t *oldmask) {3509 sigset_t intr;3510 3511 sigemptyset(&intr);3512 sigaddset(&intr, SIGINT);3513 sigprocmask(SIG_BLOCK, &intr, oldmask);3514 }3515 3516 void owl_function_unmask_sigint(sigset_t *oldmask) {3517 sigset_t intr;3518 3519 sigemptyset(&intr);3520 sigaddset(&intr, SIGINT);3521 sigprocmask(SIG_UNBLOCK, &intr, oldmask);3522 }3523 3524 3493 void _owl_function_mark_message(const owl_message *m) 3525 3494 { -
global.c
r257b9c4 r47128d9 112 112 g->timerlist = NULL; 113 113 g->kill_buffer = NULL; 114 115 g->interrupt_count = 0; 116 g->interrupt_lock = g_mutex_new(); 114 117 } 115 118 … … 924 927 g->kill_buffer = g_strndup(kill, len); 925 928 } 929 930 void owl_global_add_interrupt(owl_global *g) { 931 /* TODO: This can almost certainly be done with atomic 932 * operations. Whatever. */ 933 g_mutex_lock(g->interrupt_lock); 934 g->interrupt_count++; 935 g_mutex_unlock(g->interrupt_lock); 936 } 937 938 bool owl_global_take_interrupt(owl_global *g) { 939 bool ans = false; 940 g_mutex_lock(g->interrupt_lock); 941 if (g->interrupt_count > 0) { 942 ans = true; 943 g->interrupt_count--; 944 } 945 g_mutex_unlock(g->interrupt_lock); 946 return ans; 947 } -
owl.c
r1491439 r47128d9 362 362 } else if (sig == SIGTERM || sig == SIGHUP) { 363 363 owl_function_quit(); 364 } else if (sig == SIGINT ) {364 } else if (sig == SIGINT && owl_global_take_interrupt(&g)) { 365 365 owl_input in; 366 366 in.ch = in.uch = owl_global_get_startup_tio(&g)->c_cc[VINTR]; … … 374 374 GSource *source; 375 375 376 /* TODO: Special-case SIGINT so that it can interrupt outside the 377 * event loop. */ 378 376 /* If it was an interrupt, set a flag so we can handle it earlier if 377 * needbe. sig_handler_main_thread will check the flag to make sure 378 * no one else took it. */ 379 if (sig == SIGINT) { 380 owl_global_add_interrupt(&g); 381 } 379 382 /* Send a message to the main thread. */ 380 383 source = g_idle_source_new(); -
owl.h
r257b9c4 r47128d9 630 630 FILE *debug_file; 631 631 char *kill_buffer; 632 int interrupt_count; 633 GMutex *interrupt_lock; 632 634 } owl_global; 633 635
Note: See TracChangeset
for help on using the changeset viewer.