From 48f5de8adf777d34d679912e057dac4c999bc29a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 11 Feb 2026 23:58:42 +0300 Subject: [PATCH 1/2] fix commands execution thread --- src/devtools/stdin_reader.cpp | 26 +++++++++++++++----------- src/devtools/stdin_reader.hpp | 6 ++---- src/engine/Engine.cpp | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/devtools/stdin_reader.cpp b/src/devtools/stdin_reader.cpp index dba26b75d..683f387d3 100644 --- a/src/devtools/stdin_reader.cpp +++ b/src/devtools/stdin_reader.cpp @@ -1,5 +1,6 @@ #include "stdin_reader.hpp" +#include "engine/Engine.hpp" #include "logic/CommandsInterpreter.hpp" #include "coders/json.hpp" #include "debug/Logger.hpp" @@ -11,8 +12,9 @@ static debug::Logger logger("stdin-reader"); static std::thread reader_thread; -void start_stdin_reader(cmd::CommandsInterpreter& interpreter) { - reader_thread = std::thread([&interpreter]() { +void start_stdin_reader(Engine& engine) { + reader_thread = std::thread([&engine]() { + auto& interpreter = engine.getCmd(); logger.info() << "reader thread started"; std::string line; @@ -20,16 +22,18 @@ void start_stdin_reader(cmd::CommandsInterpreter& interpreter) { if (line.empty()) { continue; } - try { - auto result = interpreter.execute(line); - if (result.isString()) { - logger.info() << result.asString(); - } else { - logger.info() << json::stringify(result, true); + engine.postRunnable([line, &interpreter] () { + try { + auto result = interpreter.execute(line); + if (result.isString()) { + logger.info() << result.asString(); + } else { + logger.info() << json::stringify(result, true); + } + } catch (const std::exception& err) { + logger.error() << err.what(); } - } catch (const std::exception& err) { - logger.error() << err.what(); - } + }); } }); reader_thread.detach(); diff --git a/src/devtools/stdin_reader.hpp b/src/devtools/stdin_reader.hpp index d141db998..09b137311 100644 --- a/src/devtools/stdin_reader.hpp +++ b/src/devtools/stdin_reader.hpp @@ -1,7 +1,5 @@ #pragma once -namespace cmd { - class CommandsInterpreter; -} +class Engine; -void start_stdin_reader(cmd::CommandsInterpreter& interpreter); +void start_stdin_reader(Engine& engine); diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 50a6f921b..6aa970f0f 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -193,7 +193,7 @@ void Engine::initialize(CoreParameters coreParameters) { project->loadProjectClientScript(); } if (params.stdinCommands) { - start_stdin_reader(*cmd); + start_stdin_reader(*this); } } From 85c085d7c360d356c199b269fafd5abcfc848540 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 11 Feb 2026 23:59:56 +0300 Subject: [PATCH 2/2] rename --- src/devtools/{stdin_reader.cpp => stdin_cmd_reader.cpp} | 4 ++-- src/devtools/stdin_cmd_reader.hpp | 7 +++++++ src/devtools/stdin_reader.hpp | 5 ----- src/engine/Engine.cpp | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) rename src/devtools/{stdin_reader.cpp => stdin_cmd_reader.cpp} (92%) create mode 100644 src/devtools/stdin_cmd_reader.hpp delete mode 100644 src/devtools/stdin_reader.hpp diff --git a/src/devtools/stdin_reader.cpp b/src/devtools/stdin_cmd_reader.cpp similarity index 92% rename from src/devtools/stdin_reader.cpp rename to src/devtools/stdin_cmd_reader.cpp index 683f387d3..fccbb7f57 100644 --- a/src/devtools/stdin_reader.cpp +++ b/src/devtools/stdin_cmd_reader.cpp @@ -1,4 +1,4 @@ -#include "stdin_reader.hpp" +#include "stdin_cmd_reader.hpp" #include "engine/Engine.hpp" #include "logic/CommandsInterpreter.hpp" @@ -12,7 +12,7 @@ static debug::Logger logger("stdin-reader"); static std::thread reader_thread; -void start_stdin_reader(Engine& engine) { +void cmd::start_stdin_cmd_reader(Engine& engine) { reader_thread = std::thread([&engine]() { auto& interpreter = engine.getCmd(); logger.info() << "reader thread started"; diff --git a/src/devtools/stdin_cmd_reader.hpp b/src/devtools/stdin_cmd_reader.hpp new file mode 100644 index 000000000..992054250 --- /dev/null +++ b/src/devtools/stdin_cmd_reader.hpp @@ -0,0 +1,7 @@ +#pragma once + +class Engine; + +namespace cmd { + void start_stdin_cmd_reader(Engine& engine); +} diff --git a/src/devtools/stdin_reader.hpp b/src/devtools/stdin_reader.hpp deleted file mode 100644 index 09b137311..000000000 --- a/src/devtools/stdin_reader.hpp +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -class Engine; - -void start_stdin_reader(Engine& engine); diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 6aa970f0f..0f34cb031 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -15,7 +15,7 @@ #include "devtools/DebuggingServer.hpp" #include "devtools/Editor.hpp" #include "devtools/Project.hpp" -#include "devtools/stdin_reader.hpp" +#include "devtools/stdin_cmd_reader.hpp" #include "EnginePaths.hpp" #include "frontend/locale.hpp" #include "frontend/menu.hpp" @@ -193,7 +193,7 @@ void Engine::initialize(CoreParameters coreParameters) { project->loadProjectClientScript(); } if (params.stdinCommands) { - start_stdin_reader(*this); + cmd::start_stdin_cmd_reader(*this); } }