X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmainloop.c;h=c83c9262f0149951a70f46750b2c80ee18c8cb56;hb=e828732528e0ed88973dd18f2dee97a42c0b4e59;hp=95709a311a0c08743015950e6c84f6160098e26b;hpb=145922abfddde52698aa151c720d67c8adfb2c9d;p=libucw.git diff --git a/lib/mainloop.c b/lib/mainloop.c index 95709a31..c83c9262 100644 --- a/lib/mainloop.c +++ b/lib/mainloop.c @@ -229,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) { @@ -253,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 @@ -358,17 +366,7 @@ main_loop(void) { pr->status = stat; process_del(pr); - if (WIFEXITED(stat) && WEXITSTATUS(stat) < 256) - { - if (WEXITSTATUS(stat)) - sprintf(pr->status_msg, "died with exit code %d", WEXITSTATUS(stat)); - else - pr->status_msg[0] = 0; - } - else if (WIFSIGNALED(stat)) - sprintf(pr->status_msg, "died on signal %d", WTERMSIG(stat)); - else - sprintf(pr->status_msg, "died with status %x", stat); + format_exit_status(pr->status_msg, pr->status); DBG("MAIN: Calling process exit handler"); pr->handler(pr); break;