diff --git a/server/wsproxy/app.cc b/server/wsproxy/app.cc index ae5ea45..7a9fbfd 100644 --- a/server/wsproxy/app.cc +++ b/server/wsproxy/app.cc @@ -420,8 +420,8 @@ void App::ProcessClientMsg(f8::MsgHdr& hdr) } else { auto down_wp = DownStreamMgr::Instance()->GetDownStream(hdr.socket_handle); if (auto down = down_wp.lock(); !down_wp.expired()) { - if (!down->conn.expired()) { - down->conn.lock()->ForwardClientMsg(hdr); + if (!down->GetUpStream().expired()) { + down->GetUpStream().lock()->ForwardClientMsg(hdr); } } } diff --git a/server/wsproxy/downstream.cc b/server/wsproxy/downstream.cc index 7982921..f59dc5a 100644 --- a/server/wsproxy/downstream.cc +++ b/server/wsproxy/downstream.cc @@ -12,6 +12,8 @@ void DownStream::ForwardUpStreamMsg(f8::MsgHdr& hdr) void DownStream::OnClose() { - ss::SS_WSP_SocketDisconnect msg; - conn.lock()->SendMsg(socket_handle, msg); + if (!GetUpStream().expired()) { + ss::SS_WSP_SocketDisconnect msg; + GetUpStream().lock()->SendMsg(socket_handle, msg); + } } diff --git a/server/wsproxy/downstream.h b/server/wsproxy/downstream.h index 56a0fc1..720208b 100644 --- a/server/wsproxy/downstream.h +++ b/server/wsproxy/downstream.h @@ -5,11 +5,13 @@ class DownStream { public: int socket_handle = a8::INVALID_SOCKET_HANDLE; - std::weak_ptr conn; + void SetUpStream(std::weak_ptr up) { up_ = up; } + std::weak_ptr GetUpStream() { return up_; } void ForwardUpStreamMsg(f8::MsgHdr& hdr); void OnClose(); private: int type_ = 0; + std::weak_ptr up_; }; diff --git a/server/wsproxy/downstreammgr.cc b/server/wsproxy/downstreammgr.cc index 303fd36..cad716c 100644 --- a/server/wsproxy/downstreammgr.cc +++ b/server/wsproxy/downstreammgr.cc @@ -43,9 +43,7 @@ void DownStreamMgr::OnClientDisconnect(int socket_handle) { auto down_wp = GetDownStream(socket_handle); if (auto down = down_wp.lock(); !down_wp.expired()) { - if (!down->conn.expired()) { - down->OnClose(); - } + down->OnClose(); socket_hash_.erase(socket_handle); } RemovePendingAccount(socket_handle); @@ -56,7 +54,8 @@ void DownStreamMgr::OnUpStreamDisconnect(int instance_id) { std::list> delete_client; for (auto& pair : socket_hash_) { - if (!pair.second->conn.expired() && pair.second->conn.lock()->instance_id == instance_id) { + if (!pair.second->GetUpStream().expired() && + pair.second->GetUpStream().lock()->instance_id == instance_id) { delete_client.push_back(pair.second); } } @@ -84,11 +83,11 @@ void DownStreamMgr::BindUpStream(int socket_handle, int conn_instance_id) if (!conn.expired()) { auto down_wp = GetDownStream(socket_handle); if (auto down = down_wp.lock(); !down_wp.expired()) { - down->conn = conn; + down->SetUpStream(conn); } else { down = std::make_shared(); down->socket_handle = socket_handle; - down->conn = conn; + down->SetUpStream(conn); socket_hash_[down->socket_handle] = down; f8::UdpLog::Instance()->Info("BindUpStream socket_handle:%d", {