From 8419577ae51dee7691f04b5af0d10d031c6704a5 Mon Sep 17 00:00:00 2001 From: Petr Mironychev <9195189+Palm1r@users.noreply.github.com> Date: Sun, 16 Mar 2025 09:47:04 +0100 Subject: [PATCH] fix: Resolve thread-related QNetworkAccessManager issue (#140) Fixes "QObject: Cannot create children for a parent that is in a different thread" error by creating QNetworkAccessManager in the same thread where it's used, ensuring proper thread affinity for network operations. --- llmcore/RequestHandler.cpp | 5 +++-- llmcore/RequestHandler.hpp | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/llmcore/RequestHandler.cpp b/llmcore/RequestHandler.cpp index 8b41a83..98067d3 100644 --- a/llmcore/RequestHandler.cpp +++ b/llmcore/RequestHandler.cpp @@ -27,7 +27,6 @@ namespace QodeAssist::LLMCore { RequestHandler::RequestHandler(QObject *parent) : RequestHandlerBase(parent) - , m_manager(new QNetworkAccessManager(this)) {} void RequestHandler::sendLLMRequest(const LLMConfig &config, const QJsonObject &request) @@ -38,11 +37,12 @@ void RequestHandler::sendLLMRequest(const LLMConfig &config, const QJsonObject & QString::fromUtf8( QJsonDocument(config.providerRequest).toJson(QJsonDocument::Indented)))); + QNetworkAccessManager *manager = new QNetworkAccessManager(); QNetworkRequest networkRequest(config.url); config.provider->prepareNetworkRequest(networkRequest); QNetworkReply *reply - = m_manager->post(networkRequest, QJsonDocument(config.providerRequest).toJson()); + = manager->post(networkRequest, QJsonDocument(config.providerRequest).toJson()); if (!reply) { LOG_MESSAGE("Error: Failed to create network reply"); return; @@ -54,6 +54,7 @@ void RequestHandler::sendLLMRequest(const LLMConfig &config, const QJsonObject & connect(reply, &QNetworkReply::readyRead, this, [this, reply, request, config]() { handleLLMResponse(reply, request, config); }); + connect(reply, &QNetworkReply::finished, this, [manager]() { manager->deleteLater(); }); connect(reply, &QNetworkReply::finished, this, [this, reply, requestId]() { reply->deleteLater(); diff --git a/llmcore/RequestHandler.hpp b/llmcore/RequestHandler.hpp index 3d5cab7..05a57d4 100644 --- a/llmcore/RequestHandler.hpp +++ b/llmcore/RequestHandler.hpp @@ -40,7 +40,6 @@ public: void handleLLMResponse(QNetworkReply *reply, const QJsonObject &request, const LLMConfig &config); private: - QNetworkAccessManager *m_manager; QMap m_activeRequests; QMap m_accumulatedResponses;