Added a mutex for the RTCP Handler

This commit is contained in:
Staz M
2021-01-24 20:45:27 -05:00
parent 3210814648
commit c4c150a60b
2 changed files with 15 additions and 5 deletions

View File

@ -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;

View File

@ -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