X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=inline;f=lib%2Fmainloop.c;h=c83c9262f0149951a70f46750b2c80ee18c8cb56;hb=e828732528e0ed88973dd18f2dee97a42c0b4e59;hp=11ef1baacb95690a9c157cfcb74710bde3f6e757;hpb=eac8d1b596c3368c5c5d8f95962e0e9bbed05c9d;p=libucw.git diff --git a/lib/mainloop.c b/lib/mainloop.c index 11ef1baa..c83c9262 100644 --- a/lib/mainloop.c +++ b/lib/mainloop.c @@ -12,6 +12,7 @@ #include "lib/lib.h" #include "lib/mainloop.h" +#include #include #include #include @@ -25,7 +26,7 @@ sh_time_t now; uns main_shutdown; -static clist main_timer_list, main_file_list, main_hook_list, main_process_list; +clist main_timer_list, main_file_list, main_hook_list, main_process_list; static uns main_file_cnt; static uns main_poll_table_obsolete, main_poll_table_size; static struct pollfd *main_poll_table; @@ -228,6 +229,7 @@ void process_add(struct main_process *mp) { ASSERT(!mp->n.next); + ASSERT(mp->handler); clist_add_tail(&main_process_list, &mp->n); if (!main_sigchld_set_up) { @@ -252,9 +254,16 @@ process_del(struct main_process *mp) int process_fork(struct main_process *mp) { + ASSERT(!mp->pid); pid_t pid = fork(); if (pid < 0) - return -1; + { + DBG("MAIN: Fork failed"); + mp->status = -1; + format_exit_status(mp->status_msg, -1); + mp->handler(mp); + return 1; + } else if (!pid) return 0; else @@ -357,6 +366,7 @@ main_loop(void) { pr->status = stat; process_del(pr); + format_exit_status(pr->status_msg, pr->status); DBG("MAIN: Calling process exit handler"); pr->handler(pr); break;