55#include " debug_router_core.h"
66
77#include < atomic>
8+ #include < mutex>
89
910#include " debug_router/native/base/no_destructor.h"
1011#include " debug_router/native/core/debug_router_config.h"
1819#include " debug_router/native/processor/processor.h"
1920#include " debug_router/native/thread/debug_router_executor.h"
2021#include " json/value.h"
21- #include < mutex>
2222
2323namespace debugrouter {
2424
2525namespace core {
2626class MessageHandlerCore : public processor ::MessageHandler {
27- public:
27+ public:
2828 MessageHandlerCore () {}
2929
3030 std::string GetRoomId () override {
@@ -37,7 +37,8 @@ class MessageHandlerCore : public processor::MessageHandler {
3737
3838 std::unordered_map<int , std::string> GetSessionList () override {
3939 std::unordered_map<int , std::string> session_list;
40- std::lock_guard<std::mutex> lock (DebugRouterCore::GetInstance ().slots_mutex_ );
40+ std::lock_guard<std::recursive_mutex> lock (
41+ DebugRouterCore::GetInstance ().slots_mutex_ );
4142 const auto &slots = DebugRouterCore::GetInstance ().slots_ ;
4243 if (!slots.empty ()) {
4344 for (auto it = slots.begin (); it != slots.end (); ++it) {
@@ -76,7 +77,8 @@ class MessageHandlerCore : public processor::MessageHandler {
7677
7778 const auto &session_handler_map =
7879 DebugRouterCore::GetInstance ().session_handler_map_ ;
79- std::lock_guard<std::mutex> lock (DebugRouterCore::GetInstance ().slots_mutex_ );
80+ std::lock_guard<std::recursive_mutex> lock (
81+ DebugRouterCore::GetInstance ().slots_mutex_ );
8082 const auto &slots = DebugRouterCore::GetInstance ().slots_ ;
8183 for (auto it : session_handler_map) {
8284 it.second ->OnMessage (message, type, session_id);
@@ -116,8 +118,11 @@ DebugRouterCore &DebugRouterCore::GetInstance() {
116118}
117119
118120DebugRouterCore::DebugRouterCore ()
119- : connection_state_(DISCONNECTED), current_transceiver_(nullptr ),
120- max_session_id_ (0 ), processor_(nullptr ), handler_count_(1 ) {
121+ : connection_state_(DISCONNECTED),
122+ current_transceiver_ (nullptr ),
123+ max_session_id_(0 ),
124+ processor_(nullptr ),
125+ handler_count_(1 ) {
121126 message_transceivers_.push_back (std::make_shared<net::WebSocketClient>());
122127 message_transceivers_.push_back (std::make_shared<net::SocketServerClient>());
123128
@@ -207,7 +212,7 @@ void DebugRouterCore::SendDataAsync(const std::string &data,
207212}
208213
209214int32_t DebugRouterCore::Plug (const std::shared_ptr<core::NativeSlot> &slot) {
210- std::lock_guard<std::mutex > lock (slots_mutex_);
215+ std::lock_guard<std::recursive_mutex > lock (slots_mutex_);
211216 max_session_id_++;
212217 slots_[max_session_id_] = slot;
213218 LOGI (" plug session: " << max_session_id_);
@@ -227,7 +232,7 @@ int32_t DebugRouterCore::GetUSBPort() {
227232
228233void DebugRouterCore::Pull (int32_t session_id_) {
229234 LOGI (" pull session: " << session_id_);
230- std::lock_guard<std::mutex > lock (slots_mutex_);
235+ std::lock_guard<std::recursive_mutex > lock (slots_mutex_);
231236 slots_.erase (session_id_);
232237 if (connection_state_.load (std::memory_order_relaxed) == CONNECTED) {
233238 processor_->FlushSessionList ();
@@ -521,5 +526,5 @@ std::string DebugRouterCore::GetConnectionStateMsg(ConnectionState state) {
521526 }
522527}
523528
524- } // namespace core
525- } // namespace debugrouter
529+ } // namespace core
530+ } // namespace debugrouter
0 commit comments