Add several thread checks to RtpSender classes.
Minor related updates to AudioTrack and VideoTrack's sequence checkers.
There's more that can be done (or arguably needs to), but this is
a start.
Bug: none
Change-Id: I3ccf8eb9bbb6bef62b83248a23a68871b9fcd9e1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/251843
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36021}
diff --git a/pc/rtp_sender.cc b/pc/rtp_sender.cc
index 957f514..110b5aa 100644
--- a/pc/rtp_sender.cc
+++ b/pc/rtp_sender.cc
@@ -111,7 +111,8 @@
RtpSenderBase::RtpSenderBase(rtc::Thread* worker_thread,
const std::string& id,
SetStreamsObserver* set_streams_observer)
- : worker_thread_(worker_thread),
+ : signaling_thread_(rtc::Thread::Current()),
+ worker_thread_(worker_thread),
id_(id),
set_streams_observer_(set_streams_observer) {
RTC_DCHECK(worker_thread);
@@ -120,6 +121,7 @@
void RtpSenderBase::SetFrameEncryptor(
rtc::scoped_refptr<FrameEncryptorInterface> frame_encryptor) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
frame_encryptor_ = std::move(frame_encryptor);
// Special Case: Set the frame encryptor to any value on any existing channel.
if (media_channel_ && ssrc_ && !stopped_) {
@@ -136,6 +138,7 @@
}
RtpParameters RtpSenderBase::GetParametersInternal() const {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
if (stopped_) {
return RtpParameters();
}
@@ -150,6 +153,7 @@
}
RtpParameters RtpSenderBase::GetParameters() const {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
RtpParameters result = GetParametersInternal();
last_transaction_id_ = rtc::CreateRandomUuid();
result.transaction_id = last_transaction_id_.value();
@@ -157,6 +161,7 @@
}
RTCError RtpSenderBase::SetParametersInternal(const RtpParameters& parameters) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_DCHECK(!stopped_);
if (UnimplementedRtpParameterHasValue(parameters)) {
@@ -186,6 +191,7 @@
}
RTCError RtpSenderBase::SetParameters(const RtpParameters& parameters) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "RtpSenderBase::SetParameters");
if (is_transceiver_stopped_) {
LOG_AND_RETURN_ERROR(
@@ -225,6 +231,7 @@
}
bool RtpSenderBase::SetTrack(MediaStreamTrackInterface* track) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "RtpSenderBase::SetTrack");
if (stopped_) {
RTC_LOG(LS_ERROR) << "SetTrack can't be called on a stopped RtpSender.";
@@ -266,6 +273,7 @@
}
void RtpSenderBase::SetSsrc(uint32_t ssrc) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "RtpSenderBase::SetSsrc");
if (stopped_ || ssrc == ssrc_) {
return;
@@ -315,6 +323,7 @@
}
void RtpSenderBase::Stop() {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "RtpSenderBase::Stop");
// TODO(deadbeef): Need to do more here to fully stop sending packets.
if (stopped_) {
@@ -335,6 +344,7 @@
RTCError RtpSenderBase::DisableEncodingLayers(
const std::vector<std::string>& rids) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
if (stopped_) {
LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_STATE,
"Cannot disable encodings on a stopped sender.");
@@ -381,6 +391,7 @@
void RtpSenderBase::SetEncoderToPacketizerFrameTransformer(
rtc::scoped_refptr<FrameTransformerInterface> frame_transformer) {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
frame_transformer_ = std::move(frame_transformer);
if (media_channel_ && ssrc_ && !stopped_) {
worker_thread_->Invoke<void>(RTC_FROM_HERE, [&] {
@@ -483,7 +494,7 @@
}
void AudioRtpSender::OnChanged() {
- // Running on the signaling thread.
+ RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "AudioRtpSender::OnChanged");
RTC_DCHECK(!stopped_);
if (cached_track_enabled_ != track_->enabled()) {
@@ -518,10 +529,12 @@
}
rtc::scoped_refptr<DtmfSenderInterface> AudioRtpSender::GetDtmfSender() const {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
return dtmf_sender_proxy_;
}
void AudioRtpSender::SetSend() {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_DCHECK(!stopped_);
RTC_DCHECK(can_send_track());
if (!media_channel_) {
@@ -552,6 +565,7 @@
}
void AudioRtpSender::ClearSend() {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_DCHECK(ssrc_ != 0);
RTC_DCHECK(!stopped_);
if (!media_channel_) {
@@ -585,7 +599,7 @@
}
void VideoRtpSender::OnChanged() {
- // Running on the signaling thread.
+ RTC_DCHECK_RUN_ON(signaling_thread_);
TRACE_EVENT0("webrtc", "VideoRtpSender::OnChanged");
RTC_DCHECK(!stopped_);
@@ -604,11 +618,13 @@
}
rtc::scoped_refptr<DtmfSenderInterface> VideoRtpSender::GetDtmfSender() const {
- RTC_LOG(LS_ERROR) << "Tried to get DTMF sender from video sender.";
+ RTC_DCHECK_RUN_ON(signaling_thread_);
+ RTC_DLOG(LS_ERROR) << "Tried to get DTMF sender from video sender.";
return nullptr;
}
void VideoRtpSender::SetSend() {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_DCHECK(!stopped_);
RTC_DCHECK(can_send_track());
if (!media_channel_) {
@@ -640,6 +656,7 @@
}
void VideoRtpSender::ClearSend() {
+ RTC_DCHECK_RUN_ON(signaling_thread_);
RTC_DCHECK(ssrc_ != 0);
RTC_DCHECK(!stopped_);
if (!media_channel_) {