From e2d19ea2aa8f4d10aa1d6be9b09d68b6316df85b Mon Sep 17 00:00:00 2001
From: Azur Ponjavic <azur.ponjavic@rwth-aachen.de>
Date: Sat, 15 Jul 2023 09:09:27 +0200
Subject: [PATCH] moved mutex

---
 src/transport/webrtc_transport.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/transport/webrtc_transport.cpp b/src/transport/webrtc_transport.cpp
index 39a538ad..1ca2640f 100644
--- a/src/transport/webrtc_transport.cpp
+++ b/src/transport/webrtc_transport.cpp
@@ -368,7 +368,9 @@ bool WebRTCTransport::send_setup_complete(RemoteStrategy remote_strategy, Encode
     msg[2] = std::byte((maxMessageSize & 0x0000ff00) >> 8);
     msg[3] = std::byte((maxMessageSize & 0x00ff0000) >> 16);
     msg[4] = std::byte((maxMessageSize & 0xff000000) >> 24);
+    std::unique_lock<std::mutex> lock(this->worker_mutex);
     this->send_data(msg);
+    lock.unlock();
     return true;
 }
 
@@ -400,7 +402,9 @@ bool WebRTCTransport::send_frame_config_nal(FrameId frame_id, const std::span<co
     }
     lava::log()->info(str);
     memcpy(&msg[2], content.data(), sizeof(uint8_t) * content.size());
+    std::unique_lock<std::mutex> lock(this->worker_mutex);
     this->send_data(msg);
+    lock.unlock();
     return true;
 }
 
@@ -430,6 +434,7 @@ bool WebRTCTransport::send_frame_nal(FrameNumber frame_number, FrameId frame_id,
         msg_frame_buffer = new rtc::binary();
         msg_frame_buffer->reserve(maxMessageSize);
     }
+    std::unique_lock<std::mutex> lock(this->worker_mutex);
     for (u_int offset = 0; offset < content.size_bytes(); offset += (maxMessageSize - 18)) {
         u_int msg_size = (content.size_bytes() - offset < (maxMessageSize - 18)) ? (content.size_bytes() - offset + 18) : maxMessageSize;
         msg_frame_buffer->resize(msg_size);
@@ -470,6 +475,7 @@ bool WebRTCTransport::send_frame_nal(FrameNumber frame_number, FrameId frame_id,
 
         this->send_data(*msg_frame_buffer);
     }
+    lock.unlock();
     return true;
 }
 
@@ -631,13 +637,11 @@ void WebRTCTransport::set_state(TransportState state) {
 }
 
 void WebRTCTransport::send_data(const rtc::binary& rawMsg) {
-    std::unique_lock<std::mutex> lock(this->worker_mutex);
     this->send_queue.push_back(rawMsg);
     this->packets_send += 1;
     if (!this->send_active) {
         this->process_send_queue();
     }
-    lock.unlock();
 }
 
 void WebRTCTransport::process_send_queue() {
-- 
GitLab