X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain-afb-daemon.c;h=3421be819c5fbd3f789c3a7d0a5e0e82be3e3ef8;hb=6f13ad1989875b5a0ce50b24211fd1fba093735f;hp=d825d803858708cd60dae37c1bc841d4d78e6c68;hpb=16f014ef35b8355de1006891fe6920c8b51675fe;p=src%2Fapp-framework-binder.git diff --git a/src/main-afb-daemon.c b/src/main-afb-daemon.c index d825d803..3421be81 100644 --- a/src/main-afb-daemon.c +++ b/src/main-afb-daemon.c @@ -358,8 +358,12 @@ static struct afb_hsrv *start_http_server() } if (afb_hreq_init_download_path(uploaddir)) { - ERROR("unable to set the upload directory %s", uploaddir); - return NULL; + static const char fallback_uploaddir[] = "/tmp"; + WARNING("unable to set the upload directory %s", uploaddir); + if (afb_hreq_init_download_path(fallback_uploaddir)) { + ERROR("unable to fallback to upload directory %s", fallback_uploaddir); + return NULL; + } } hsrv = afb_hsrv_create(); @@ -399,15 +403,25 @@ static struct afb_hsrv *start_http_server() | execute_command +--------------------------------------------------------- */ -static void wait_child_and_exit() +static void exit_at_end() +{ + exit(0); +} + +static void wait_child(int signum, void* arg) { + pid_t pid = (pid_t)(intptr_t)arg; pid_t pidchld = childpid; - childpid = 0; - if (!SELF_PGROUP) - killpg(pidchld, SIGKILL); - waitpid(pidchld, NULL, 0); - exit(0); + if (pidchld == pid) { + childpid = 0; + if (!SELF_PGROUP) + killpg(pidchld, SIGKILL); + waitpid(pidchld, NULL, 0); + jobs_exit(exit_at_end); + } else { + waitpid(pid, NULL, 0); + } } static void on_sigchld(int signum, siginfo_t *info, void *uctx) @@ -417,7 +431,7 @@ static void on_sigchld(int signum, siginfo_t *info, void *uctx) case CLD_EXITED: case CLD_KILLED: case CLD_DUMPED: - jobs_exit(wait_child_and_exit); + jobs_queue_lazy(0, 0, wait_child, (void*)(intptr_t)info->si_pid); default: break; } @@ -935,7 +949,7 @@ int main(int argc, char *argv[]) afb_debug("main-start"); /* enter job processing */ - jobs_start(3, 0, 50, start, NULL); + jobs_start(3, 0, 100, start, NULL); WARNING("hoops returned from jobs_enter! [report bug]"); return 1; }