浏览代码

Merge pull request #298 from paullouisageneau/mitigation-sctp-flush

Fix SCTP not flushing correctly on heavy traffic
Paul-Louis Ageneau 4 年之前
父节点
当前提交
a5cc76bb85
共有 2 个文件被更改,包括 6 次插入7 次删除
  1. 3 3
      src/sctptransport.cpp
  2. 3 4
      src/tcptransport.cpp

+ 3 - 3
src/sctptransport.cpp

@@ -283,12 +283,12 @@ bool SctpTransport::send(message_ptr message) {
 	std::lock_guard lock(mSendMutex);
 	std::lock_guard lock(mSendMutex);
 
 
 	if (!message)
 	if (!message)
-		return mSendQueue.empty();
+		return trySendQueue();
 
 
 	PLOG_VERBOSE << "Send size=" << message->size();
 	PLOG_VERBOSE << "Send size=" << message->size();
 
 
-	// If nothing is pending, try to send directly
-	if (mSendQueue.empty() && trySendMessage(message))
+	// Flush the queue, and if nothing is pending, try to send directly
+	if (trySendQueue() && trySendMessage(message))
 		return true;
 		return true;
 
 
 	mSendQueue.push(message);
 	mSendQueue.push(message);

+ 3 - 4
src/tcptransport.cpp

@@ -113,7 +113,7 @@ bool TcpTransport::send(message_ptr message) {
 		return false;
 		return false;
 
 
 	if (!message)
 	if (!message)
-		return mSendQueue.empty();
+		return trySendQueue();
 
 
 	PLOG_VERBOSE << "Send size=" << (message ? message->size() : 0);
 	PLOG_VERBOSE << "Send size=" << (message ? message->size() : 0);
 	return outgoing(message);
 	return outgoing(message);
@@ -129,9 +129,8 @@ void TcpTransport::incoming(message_ptr message) {
 
 
 bool TcpTransport::outgoing(message_ptr message) {
 bool TcpTransport::outgoing(message_ptr message) {
 	// mSockMutex must be locked
 	// mSockMutex must be locked
-	// If nothing is pending, try to send directly
-	// It's safe because if the queue is empty, the thread is not sending
-	if (mSendQueue.empty() && trySendMessage(message))
+	// Flush the queue, and if nothing is pending, try to send directly
+	if (trySendQueue() && trySendMessage(message))
 		return true;
 		return true;
 
 
 	mSendQueue.push(message);
 	mSendQueue.push(message);