雾聪
2023-08-30 242a98e70e12c2c8b30ad20931cb8c9278c04ffa
add lock for remove_hdl
2个文件已修改
19 ■■■■■ 已修改文件
funasr/runtime/websocket/websocket-server-2pass.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/websocket/websocket-server.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
funasr/runtime/websocket/websocket-server-2pass.cpp
@@ -299,9 +299,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);
      }
    }
  }
}
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;