From d901988acd5d9914edd597c28637de51e7ca8b19 Mon Sep 17 00:00:00 2001 From: yang-19970325 Date: Sun, 10 Nov 2024 18:51:59 +0800 Subject: [PATCH] Fix reconnected fail problem Issue: #IB39K1 Signed-off-by: yang-19970325 --- inspector/connect_inspector.cpp | 11 +++++++++-- inspector/connect_server.cpp | 9 +++++++++ inspector/connect_server.h | 2 ++ inspector/inspector.cpp | 13 ++++++++----- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/inspector/connect_inspector.cpp b/inspector/connect_inspector.cpp index 4fdb8579..54bcb47e 100644 --- a/inspector/connect_inspector.cpp +++ b/inspector/connect_inspector.cpp @@ -181,9 +181,16 @@ bool StartServerForSocketPair(int socketfd) g_inspector = std::make_unique(); } if (g_inspector->connectServer_ != nullptr) { - LOGW("ConnectServer is not nullptr!"); - return true; + if (!g_inspector->connectServer_.get()->IsConnected()) { + LOGW("ConnectServer is disconnected!"); + // if disconnected and reconnected, we need stop old connectServer and create new connectServer + ResetService(); + } else { + LOGW("ConnectServer is connected!"); + return true; + } } + g_inspector->connectServer_ = std::make_unique(socketfd, std::bind(&OnMessage, std::placeholders::_1)); diff --git a/inspector/connect_server.cpp b/inspector/connect_server.cpp index 162b727e..bf4fd14f 100644 --- a/inspector/connect_server.cpp +++ b/inspector/connect_server.cpp @@ -66,12 +66,16 @@ void ConnectServer::RunServer() } } #endif + if (webSocket_->IsConnected()) { + isConnected_ = true; + } while (webSocket_->IsConnected()) { std::string message = webSocket_->Decode(); if (!message.empty()) { wsOnMessage_(std::move(message)); } } + isConnected_ = false; } } @@ -96,4 +100,9 @@ void ConnectServer::SendMessage(const std::string& message) const LOGI("ConnectServer SendReply: %{public}s", message.c_str()); webSocket_->SendReply(message); } + +bool ConnectServer::IsConnected() +{ + return isConnected_; +} } // namespace OHOS::ArkCompiler::Toolchain diff --git a/inspector/connect_server.h b/inspector/connect_server.h index 22d19e87..2207d219 100644 --- a/inspector/connect_server.h +++ b/inspector/connect_server.h @@ -36,6 +36,7 @@ public: void RunServer(); void StopServer(); void SendMessage(const std::string& message) const; + bool IsConnected(); private: std::atomic terminateExecution_ = false; @@ -44,6 +45,7 @@ private: pthread_t tid_ {0}; std::function wsOnMessage_ {}; std::unique_ptr webSocket_ { nullptr }; + std::atomic isConnected_ = false; }; } // namespace OHOS::ArkCompiler::Toolchain diff --git a/inspector/inspector.cpp b/inspector/inspector.cpp index 030dbdde..f684b793 100644 --- a/inspector/inspector.cpp +++ b/inspector/inspector.cpp @@ -150,15 +150,18 @@ bool InitializeInspector( void* vm, const DebuggerPostTask& debuggerPostTask, const DebugInfo& debugInfo, int tidForSocketPair = 0) { std::unique_lock lock(g_mutex); + Inspector *newInspector = nullptr; auto iter = g_inspectors.find(vm); if (iter != g_inspectors.end()) { - LOGW("Inspector already exist!"); - return true; + newInspector = g_inspectors[vm]; + } else { + newInspector = new Inspector(); + if (!g_inspectors.emplace(vm, newInspector).second) { + delete newInspector; + return false; + } } - Inspector *newInspector = new Inspector(); - g_inspectors.emplace(vm, newInspector); - newInspector->tidForSocketPair_ = tidForSocketPair; newInspector->tid_ = pthread_self(); newInspector->vm_ = vm; -- Gitee