update sub-instance lifetime

This commit is contained in:
MihailRis 2026-08-01 22:32:49 +03:00
parent ee9b2ab266
commit 5a8fd3ceab
4 changed files with 12 additions and 5 deletions

View file

@ -413,6 +413,7 @@ void Engine::onWorldClosed() {
} }
void Engine::quit() { void Engine::quit() {
logger.info() << "quitSignal set to true";
quitSignal = true; quitSignal = true;
if (!isHeadless()) { if (!isHeadless()) {
window->setShouldClose(true); window->setShouldClose(true);

View file

@ -22,6 +22,10 @@
using namespace scripting; using namespace scripting;
namespace {
static std::unique_ptr<Process> sub_instance = nullptr;
}
/// @brief Check if content is loaded /// @brief Check if content is loaded
static int l_is_content_loaded(lua::State* L) { static int l_is_content_loaded(lua::State* L) {
return lua::pushboolean(L, content != nullptr); return lua::pushboolean(L, content != nullptr);
@ -377,7 +381,7 @@ static int l_start_background_instance(lua::State* L) {
const auto& paths = engine->getPaths(); const auto& paths = engine->getPaths();
std::vector<std::string> args { std::vector<std::string> args {
"--headless", // "--headless",
"--res", paths.getResourcesFolder().u8string(), "--res", paths.getResourcesFolder().u8string(),
"--dir", paths.getUserFilesFolder().u8string(), "--dir", paths.getUserFilesFolder().u8string(),
"--script", io::resolve(scriptPath).u8string(), "--script", io::resolve(scriptPath).u8string(),
@ -385,7 +389,7 @@ static int l_start_background_instance(lua::State* L) {
args.emplace_back("--project"); args.emplace_back("--project");
args.emplace_back(io::resolve(engine->getProject().path).u8string()); args.emplace_back(io::resolve(engine->getProject().path).u8string());
platform::new_engine_instance( ::sub_instance = platform::new_engine_instance(
std::move(args), std::move(args),
outputPath.empty() ? "" : io::resolve(outputPath), outputPath.empty() ? "" : io::resolve(outputPath),
true true

View file

@ -10,7 +10,7 @@
static debug::Logger logger("main"); static debug::Logger logger("main");
static void sigterm_handler(int signum) { static void sigterm_handler(int signum) {
logger.info() << "SIGTERM received"; logger.info() << "SIGTERM received " << signum;
Engine::getInstance().quit(); Engine::getInstance().quit();
} }

View file

@ -296,7 +296,8 @@ public:
void terminate() final override { void terminate() final override {
#ifdef __linux__ #ifdef __linux__
kill(pid, SIGKILL); logger.info() << "terminating " << pid;
kill(pid, SIGTERM);
#elif defined(_WIN32) #elif defined(_WIN32)
if (processHandle != nullptr) { if (processHandle != nullptr) {
TerminateProcess(processHandle, 1); TerminateProcess(processHandle, 1);
@ -461,10 +462,11 @@ std::unique_ptr<Process> platform::new_engine_instance(
_exit(127); _exit(127);
} else { } else {
close(fd); close(fd);
usleep(1000); // waiting for execvp call
return std::make_unique<SystemProcess>(pid); return std::make_unique<SystemProcess>(pid);
} }
} }
#endif // __APPLE_ #endif
std::stringstream ss; std::stringstream ss;
ss << executable; ss << executable;