Ver Fonte

Merge branch 'v0.11'

Paul-Louis Ageneau há 4 anos atrás
pai
commit
6b4db006f4
3 ficheiros alterados com 10 adições e 5 exclusões
  1. 1 1
      CMakeLists.txt
  2. 6 3
      src/impl/sctptransport.cpp
  3. 3 1
      src/impl/sctptransport.hpp

+ 1 - 1
CMakeLists.txt

@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.7)
 cmake_minimum_required(VERSION 3.7)
 project(libdatachannel
 project(libdatachannel
-	VERSION 0.11.6
+	VERSION 0.11.7
 	LANGUAGES CXX)
 	LANGUAGES CXX)
 set(PROJECT_DESCRIPTION "WebRTC Data Channels Library")
 set(PROJECT_DESCRIPTION "WebRTC Data Channels Library")
 
 

+ 6 - 3
src/impl/sctptransport.cpp

@@ -534,13 +534,16 @@ void SctpTransport::updateBufferedAmount(uint16_t streamId, long delta) {
 	else
 	else
 		it->second = amount;
 		it->second = amount;
 
 
-	mSendMutex.unlock();
+	// Synchronously call the buffered amount callback
+	triggerBufferedAmount(streamId, amount);
+}
+
+void SctpTransport::triggerBufferedAmount(uint16_t streamId, size_t amount) {
 	try {
 	try {
 		mBufferedAmountCallback(streamId, amount);
 		mBufferedAmountCallback(streamId, amount);
 	} catch (const std::exception &e) {
 	} catch (const std::exception &e) {
-		PLOG_DEBUG << "SCTP buffered amount callback: " << e.what();
+		PLOG_WARNING << "SCTP buffered amount callback: " << e.what();
 	}
 	}
-	mSendMutex.lock();
 }
 }
 
 
 void SctpTransport::sendReset(uint16_t streamId) {
 void SctpTransport::sendReset(uint16_t streamId) {

+ 3 - 1
src/impl/sctptransport.hpp

@@ -82,6 +82,7 @@ private:
 	bool trySendQueue();
 	bool trySendQueue();
 	bool trySendMessage(message_ptr message);
 	bool trySendMessage(message_ptr message);
 	void updateBufferedAmount(uint16_t streamId, long delta);
 	void updateBufferedAmount(uint16_t streamId, long delta);
+	void triggerBufferedAmount(uint16_t streamId, size_t amount);
 	void sendReset(uint16_t streamId);
 	void sendReset(uint16_t streamId);
 	bool safeFlush();
 	bool safeFlush();
 
 
@@ -96,7 +97,8 @@ private:
 
 
 	Processor mProcessor;
 	Processor mProcessor;
 	std::atomic<int> mPendingRecvCount;
 	std::atomic<int> mPendingRecvCount;
-	std::mutex mRecvMutex, mSendMutex;
+	std::mutex mRecvMutex;
+	std::recursive_mutex mSendMutex; // buffered amount callback is synchronous
 	Queue<message_ptr> mSendQueue;
 	Queue<message_ptr> mSendQueue;
 	std::map<uint16_t, size_t> mBufferedAmount;
 	std::map<uint16_t, size_t> mBufferedAmount;
 	amount_callback mBufferedAmountCallback;
 	amount_callback mBufferedAmountCallback;