Commit e270cf9c (more than two years ago) was well-intentioned, but introduced a new bug: we no longer wait for the background programs to finish before stopping httpserver. So for example if the command line is something like
/cli/cli.so & finish_quickly.so And finish_quickly.so finishes quickly, we do not wait for cli.so to finish before killing httpserver. One user discovered that because of that, the image created by "./scripts/build image=java-example,cli" runs the short-lived java-example but then the CLI doesn't work: It can't run any commands because the httpserver it relies on is already dead. So this patch partially reverts e270cf9c... We keep the "app registry" introduced there, but we still have a separate list of background apps started in the command line - and wait for them to finish before asking httpserver to exit. Signed-off-by: Nadav Har'El <n...@scylladb.com> --- loader.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/loader.cc b/loader.cc index 43aba5f..82306a4 100644 --- a/loader.cc +++ b/loader.cc @@ -495,6 +495,7 @@ void* do_main_thread(void *_main_args) // empty otherwise, to run in this thread. '&!' is the same as '&', but // doesn't wait for the thread to finish before exiting OSv. std::vector<shared_app_t> detached; + std::vector<shared_app_t> bg; for (auto &it : commands) { std::vector<std::string> newvec(it.begin(), std::prev(it.end())); auto suffix = it.back(); @@ -505,6 +506,8 @@ void* do_main_thread(void *_main_args) detached.push_back(app); } else if (!background) { app->join(); + } else { + bg.push_back(app); } } catch (const launch_error& e) { std::cerr << e.what() << ". Powering off.\n"; @@ -512,6 +515,10 @@ void* do_main_thread(void *_main_args) } } + for (auto app : bg) { + app->join(); + } + for (auto app : detached) { app->request_termination(); debug("Requested termination of %s, waiting...\n", app->get_command()); -- 2.9.3 -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to osv-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.