X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=gui.c;h=c82cd8c32300b27d2bd6c5a8d15bff60e52fb372;hb=64e24b296546197f0e3c5bb1dc5af8ed16374f08;hp=61ce0432856304f065e2720d273b07454040a367;hpb=bc15c3ff65eb00e04ebc303cfa9ee3d1a4675b35;p=paraslash.git diff --git a/gui.c b/gui.c index 61ce0432..c82cd8c3 100644 --- a/gui.c +++ b/gui.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1998-2014 Andre Noll + * Copyright (C) 1998 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -659,7 +659,8 @@ static int status_post_select(struct sched *s, void *context) ret2 = for_each_stat_item(st->buf, st->loaded, update_item); if (ret < 0 || ret2 < 0) { st->loaded = 0; - PARA_NOTICE_LOG("closing stat pipe: %s\n", para_strerror(-ret)); + PARA_NOTICE_LOG("closing stat pipe: %s\n", + para_strerror(ret < 0? -ret : -ret2)); close(st->fd); st->fd = -1; clear_all_items(); @@ -1131,12 +1132,6 @@ static int input_post_select(__a_unused struct sched *s, __a_unused void *contex return 0; } -static void signal_pre_select(struct sched *s, void *context) -{ - struct signal_task *st = context; - para_fd_set(st->fd, &s->rfds, &s->max_fileno); -} - static void print_scroll_msg(void) { unsigned lines_total, filled = ringbuffer_filled(bot_win_rb); @@ -1407,10 +1402,11 @@ __noreturn static void print_help_and_die(void) static int setup_tasks_and_schedule(void) { + int ret; struct exec_task exec_task = {.task = NULL}; struct status_task status_task = {.fd = -1}; struct input_task input_task = {.task = NULL}; - struct signal_task signal_task = {.task = NULL}; + struct signal_task *signal_task; struct sched sched = { .default_timeout = { .tv_sec = conf.timeout_arg / 1000, @@ -1439,18 +1435,21 @@ static int setup_tasks_and_schedule(void) .context = &input_task, }, &sched); - signal_task.fd = para_signal_init(); + signal_task = signal_init_or_die(); para_install_sighandler(SIGINT); para_install_sighandler(SIGTERM); para_install_sighandler(SIGCHLD); para_install_sighandler(SIGUSR1); - signal_task.task = task_register(&(struct task_info) { + signal_task->task = task_register(&(struct task_info) { .name = "signal", .pre_select = signal_pre_select, .post_select = signal_post_select, - .context = &signal_task, + .context = signal_task, }, &sched); - return schedule(&sched); + ret = schedule(&sched); + sched_shutdown(&sched); + signal_shutdown(signal_task); + return ret; } /**