diff --git a/server/wsproxy/app.cc b/server/wsproxy/app.cc index bc61c28..b7ccb2b 100644 --- a/server/wsproxy/app.cc +++ b/server/wsproxy/app.cc @@ -562,5 +562,26 @@ void App::AddUdpMsg(a8::UdpPacket* pkt) void App::DispatchUdpMsg() { + long long starttick = a8::XGetTickCount(); + if (!udp_work_node_ && udp_top_node_) { + udp_msg_mutex_->lock(); + udp_work_node_ = udp_top_node_; + udp_top_node_ = nullptr; + udp_bot_node_ = nullptr; + udp_working_msgnode_size_ = udp_msgnode_size_; + udp_msg_mutex_->unlock(); + } + while (udp_work_node_) { + UdpMsgNode *pdelnode = udp_work_node_; + udp_work_node_ = pdelnode->next; + udp_working_msgnode_size_--; + if (a8::XGetTickCount() - starttick > 200) { + break; + } + }//end while + + if (!udp_work_node_) { + working_msgnode_size_ = 0; + } } diff --git a/server/wsproxy/app.h b/server/wsproxy/app.h index ec1ee6f..ff6ef8f 100644 --- a/server/wsproxy/app.h +++ b/server/wsproxy/app.h @@ -87,5 +87,6 @@ public: int msgnode_size_ = 0 ; int udp_msgnode_size_ = 0 ; int working_msgnode_size_ = 0; + int udp_working_msgnode_size_ = 0; };