Browse Source

Add mutex to RtcpNackResponder::Storage

Paul-Louis Ageneau 1 year ago
parent
commit
4e9bb1af02
2 changed files with 3 additions and 1 deletions
  1. 1 1
      include/rtc/rtcpnackresponder.hpp
  2. 2 0
      src/rtcpnackresponder.cpp

+ 1 - 1
include/rtc/rtcpnackresponder.hpp

@@ -37,9 +37,9 @@ class RTC_CPP_EXPORT RtcpNackResponder final : public MediaHandlerElement {
 		shared_ptr<Element> oldest = nullptr;
 		/// Newest packet in storage
 		shared_ptr<Element> newest = nullptr;
-
 		/// Inner storage
 		std::unordered_map<uint16_t, shared_ptr<Element>> storage{};
+		std::mutex mutex;
 
 		/// Maximum storage size
 		const unsigned maximumSize;

+ 2 - 0
src/rtcpnackresponder.cpp

@@ -28,6 +28,7 @@ RtcpNackResponder::Storage::Storage(unsigned _maximumSize) : maximumSize(_maximu
 }
 
 optional<binary_ptr> RtcpNackResponder::Storage::get(uint16_t sequenceNumber) {
+	std::lock_guard lock(mutex);
 	auto position = storage.find(sequenceNumber);
 	return position != storage.end() ? std::make_optional(storage.at(sequenceNumber)->packet)
 	                                 : nullopt;
@@ -40,6 +41,7 @@ void RtcpNackResponder::Storage::store(binary_ptr packet) {
 	auto rtp = reinterpret_cast<RtpHeader *>(packet->data());
 	auto sequenceNumber = rtp->seqNumber();
 
+	std::lock_guard lock(mutex);
 	assert((storage.empty() && !oldest && !newest) || (!storage.empty() && oldest && newest));
 
 	if (size() == 0) {