X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=audiod.c;h=2dba01c6fa938dec24264d69480ddb5b0e23f61a;hb=da1a145bf2f9d1a57c3359372695894247fef704;hp=5aa32de5dd5798171e8e3c5f88e6e74ccc5e28c6;hpb=0fab5d5201804efe0177e4a6ea3f17864431c5f1;p=paraslash.git diff --git a/audiod.c b/audiod.c index 5aa32de5..2dba01c6 100644 --- a/audiod.c +++ b/audiod.c @@ -243,43 +243,6 @@ static int get_empty_slot(void) return -E_NO_MORE_SLOTS; } -static void close_stat_pipe(void) -{ - int i; - - if (!stat_task->pcd) - return; - client_close(stat_task->pcd); - stat_task->pcd = NULL; - for (i = 0; i < NUM_STAT_ITEMS; i++) { - free(stat_task->stat_item_values[i]); - stat_task->stat_item_values[i] = NULL; - } - dump_empty_status(); - stat_task->length_seconds = 0; - stat_task->offset_seconds = 0; - audiod_status_dump(); - stat_task->playing = 0; - stat_task->stat_item_values[SI_STATUS_BAR] = make_message( - "%s:no connection to para_server\n", - status_item_list[SI_STATUS_BAR]); - stat_client_write(stat_task->stat_item_values[SI_STATUS_BAR], - SI_STATUS_BAR); - if (stat_task->clock_diff_count) { - stat_task->clock_diff_barrier.tv_sec = now->tv_sec + 1; - stat_task->clock_diff_barrier.tv_usec = now->tv_usec; - } -} - -void __noreturn clean_exit(int status, const char *msg) -{ - PARA_EMERG_LOG("%s\n", msg); - if (socket_name) - unlink(socket_name); - close_stat_pipe(); - exit(status); -} - /** * get the number of filters * @@ -578,18 +541,6 @@ static void check_stat_line(char *line) } } -static void handle_signal(int sig) -{ - switch (sig) { - case SIGINT: - case SIGTERM: - case SIGHUP: - PARA_EMERG_LOG("terminating on signal %d\n", sig); - clean_exit(EXIT_FAILURE, "caught deadly signal"); - return; - } -} - static void try_to_close_slot(int slot_num) { struct slot_info *s = &slot[slot_num]; @@ -915,10 +866,13 @@ static void signal_event_handler(struct task *t) { struct signal_task *st = t->private_data; - if (t->ret != -E_SIGNAL_CAUGHT) - PARA_ERROR_LOG("%s (ignored)\n", PARA_STRERROR(-t->ret)); - else - handle_signal(st->signum); + switch (st->signum) { + case SIGINT: + case SIGTERM: + case SIGHUP: + PARA_EMERG_LOG("terminating on signal %d\n", st->signum); + clean_exit(EXIT_FAILURE, "caught deadly signal"); + } } static void signal_pre_select(struct sched *s, struct task *t) @@ -978,6 +932,44 @@ static void init_command_task(struct command_task *ct) sprintf(ct->task.status, "command task"); } +static void close_stat_pipe(void) +{ + int i; + + if (!stat_task->pcd) + return; + client_close(stat_task->pcd); + stat_task->pcd = NULL; + for (i = 0; i < NUM_STAT_ITEMS; i++) { + free(stat_task->stat_item_values[i]); + stat_task->stat_item_values[i] = NULL; + } + dump_empty_status(); + stat_task->length_seconds = 0; + stat_task->offset_seconds = 0; + audiod_status_dump(); + stat_task->playing = 0; + stat_task->stat_item_values[SI_STATUS_BAR] = make_message( + "%s:no connection to para_server\n", + status_item_list[SI_STATUS_BAR]); + stat_client_write(stat_task->stat_item_values[SI_STATUS_BAR], + SI_STATUS_BAR); + if (stat_task->clock_diff_count) { + stat_task->clock_diff_barrier.tv_sec = now->tv_sec + 1; + stat_task->clock_diff_barrier.tv_usec = now->tv_usec; + } +} + +void __noreturn clean_exit(int status, const char *msg) +{ + PARA_EMERG_LOG("%s\n", msg); + if (socket_name) + unlink(socket_name); + close_stat_pipe(); + exit(status); +} + + static void client_task_event_handler(__a_unused struct task *t) { struct private_client_data *pcd = t->private_data;