From 48f5de8adf777d34d679912e057dac4c999bc29a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 11 Feb 2026 23:58:42 +0300 Subject: [PATCH] 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); } }