소스 검색

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);
 
 	if (!message)
-		return mSendQueue.empty();
+		return trySendQueue();
 
 	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;
 
 	mSendQueue.push(message);

+ 3 - 4
src/tcptransport.cpp

@@ -113,7 +113,7 @@ bool TcpTransport::send(message_ptr message) {
 		return false;
 
 	if (!message)
-		return mSendQueue.empty();
+		return trySendQueue();
 
 	PLOG_VERBOSE << "Send size=" << (message ? message->size() : 0);
 	return outgoing(message);
@@ -129,9 +129,8 @@ void TcpTransport::incoming(message_ptr message) {
 
 bool TcpTransport::outgoing(message_ptr message) {
 	// 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;
 
 	mSendQueue.push(message);