X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fmainloop.c;h=c83c9262f0149951a70f46750b2c80ee18c8cb56;hb=e828732528e0ed88973dd18f2dee97a42c0b4e59;hp=f630664c46db2cfdfb7316406c50f7a228482c5c;hpb=1da6ba3aeb33c68e8b3a50fe1d76242192343191;p=libucw.git diff --git a/lib/mainloop.c b/lib/mainloop.c index f630664c..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; @@ -157,7 +158,7 @@ file_write_handler(struct main_file *fi) } void -file_read(struct main_file *fi, byte *buf, uns len) +file_read(struct main_file *fi, void *buf, uns len) { ASSERT(fi->n.next); if (len) @@ -177,7 +178,7 @@ file_read(struct main_file *fi, byte *buf, uns len) } void -file_write(struct main_file *fi, byte *buf, uns len) +file_write(struct main_file *fi, void *buf, uns len) { ASSERT(fi->n.next); if (len) @@ -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;