From 242a98e70e12c2c8b30ad20931cb8c9278c04ffa Mon Sep 17 00:00:00 2001
From: 雾聪 <wucong.lyb@alibaba-inc.com>
Date: 星期三, 30 八月 2023 11:11:02 +0800
Subject: [PATCH] add lock for remove_hdl
---
funasr/runtime/websocket/websocket-server.cpp | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/funasr/runtime/websocket/websocket-server.cpp b/funasr/runtime/websocket/websocket-server.cpp
index f9febbd..36af3c2 100644
--- a/funasr/runtime/websocket/websocket-server.cpp
+++ b/funasr/runtime/websocket/websocket-server.cpp
@@ -149,7 +149,6 @@
unique_lock guard_decoder(*(data_msg->thread_lock));
data_msg->msg["is_eof"]=true;
guard_decoder.unlock();
- // data_map.erase(hdl); // remove data vector when connection is closed
LOG(INFO) << "on_close, active connections: " << data_map.size();
}
@@ -158,7 +157,6 @@
websocketpp::connection_hdl hdl,
std::map<websocketpp::connection_hdl, std::shared_ptr<FUNASR_MESSAGE>,
std::owner_less<websocketpp::connection_hdl>>& data_map) {
-
std::shared_ptr<FUNASR_MESSAGE> data_msg = nullptr;
auto it_data = data_map.find(hdl);
if (it_data != data_map.end()) {
@@ -214,8 +212,10 @@
iter++;
}
for (auto hdl : to_remove) {
- remove_hdl(hdl, data_map);
- //LOG(INFO) << "remove one connection ";
+ {
+ unique_lock lock(m_lock);
+ remove_hdl(hdl, data_map);
+ }
}
}
}
@@ -230,7 +230,11 @@
auto it_data = data_map.find(hdl);
if (it_data != data_map.end()) {
msg_data = it_data->second;
+ } else{
+ lock.unlock();
+ return;
}
+
std::shared_ptr<std::vector<char>> sample_data_p = msg_data->samples;
std::shared_ptr<websocketpp::lib::mutex> thread_lock_p = msg_data->thread_lock;
--
Gitblit v1.9.1