mirror of
https://github.com/mii443/libdatachannel.git
synced 2025-08-22 23:25:33 +00:00
Added a mutex for the RTCP Handler
This commit is contained in:
@ -28,6 +28,7 @@
|
||||
|
||||
#include <atomic>
|
||||
#include <variant>
|
||||
#include <shared_mutex>
|
||||
|
||||
namespace rtc {
|
||||
|
||||
@ -77,6 +78,8 @@ private:
|
||||
std::atomic<bool> mIsClosed = false;
|
||||
|
||||
Queue<message_ptr> mRecvQueue;
|
||||
|
||||
std::shared_mutex mRtcpHandlerMutex;
|
||||
std::shared_ptr<RtcpHandler> mRtcpHandler;
|
||||
|
||||
friend class PeerConnection;
|
||||
|
@ -62,7 +62,8 @@ bool Track::send(message_variant data) {
|
||||
|
||||
auto message = make_message(std::move(data));
|
||||
|
||||
if (mRtcpHandler) {
|
||||
std::shared_lock lock(mRtcpHandlerMutex);
|
||||
if (mRtcpHandler) {
|
||||
message = mRtcpHandler->outgoing(message);
|
||||
if (!message)
|
||||
return false;
|
||||
@ -122,7 +123,8 @@ void Track::incoming(message_ptr message) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mRtcpHandler) {
|
||||
std::shared_lock lock(mRtcpHandlerMutex);
|
||||
if (mRtcpHandler) {
|
||||
message = mRtcpHandler->incoming(message);
|
||||
if (!message)
|
||||
return;
|
||||
@ -159,17 +161,22 @@ bool Track::outgoing([[maybe_unused]] message_ptr message) {
|
||||
}
|
||||
|
||||
void Track::setRtcpHandler(std::shared_ptr<RtcpHandler> handler) {
|
||||
mRtcpHandler = std::move(handler);
|
||||
std::unique_lock lock(mRtcpHandlerMutex);
|
||||
mRtcpHandler = std::move(handler);
|
||||
if (mRtcpHandler)
|
||||
mRtcpHandler->onOutgoing(std::bind(&Track::outgoing, this, std::placeholders::_1));
|
||||
}
|
||||
|
||||
bool Track::requestKeyframe() {
|
||||
if (mRtcpHandler)
|
||||
std::shared_lock lock(mRtcpHandlerMutex);
|
||||
if (mRtcpHandler)
|
||||
return mRtcpHandler->requestKeyframe();
|
||||
return false;
|
||||
}
|
||||
|
||||
std::shared_ptr<RtcpHandler> Track::getRtcpHandler() { return mRtcpHandler; }
|
||||
std::shared_ptr<RtcpHandler> Track::getRtcpHandler() {
|
||||
std::shared_lock lock(mRtcpHandlerMutex);
|
||||
return mRtcpHandler;
|
||||
}
|
||||
|
||||
} // namespace rtc
|
||||
|
Reference in New Issue
Block a user