Allow RTP module thread checking to know PacketRouter status.
Since https://webrtc-review.googlesource.com/c/src/+/228433 both audio
and video now only call Get/SetRtpState while not registered to the
packet router.
We can thus remove the lock around packet sequencer and just use a
thread checker.
Bug: webrtc:11340
Change-Id: Ie6865cc96c36208700c31a75747ff4dd992ce68d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/228435
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34755}
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2.h b/modules/rtp_rtcp/source/rtp_rtcp_impl2.h
index b468bb7..f01c0c0 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2.h
@@ -169,6 +169,8 @@
size_t ExpectedPerPacketOverhead() const override;
+ void OnPacketSendingThreadSwitched() override;
+
// RTCP part.
// Get RTCP status.
@@ -269,12 +271,9 @@
// If false, sequencing is owned by `packet_generator` and can happen on
// several threads. If true, sequencing always happens on the pacer thread.
const bool deferred_sequencing_;
- // TODO(bugs.webrtc.org/11340): Remove lock one we can guarantee that
- // setting/getting rtp state only happens after removal from packet sending
- // code path.
- mutable Mutex mutex_sequencer_;
+ SequenceChecker sequencing_checker;
// Handles sequence number assignment and padding timestamp generation.
- PacketSequencer sequencer_ RTC_GUARDED_BY(mutex_sequencer_);
+ PacketSequencer sequencer RTC_GUARDED_BY(sequencing_checker);
// Handles final time timestamping/stats/etc and handover to Transport.
RtpSenderEgress packet_sender;
// If no paced sender configured, this class will be used to pass packets
@@ -314,8 +313,7 @@
TimeDelta duration);
TaskQueueBase* const worker_queue_;
- RTC_NO_UNIQUE_ADDRESS SequenceChecker packet_sequence_checker_;
- RTC_NO_UNIQUE_ADDRESS SequenceChecker pacer_thread_checker_;
+ RTC_NO_UNIQUE_ADDRESS SequenceChecker rtcp_thread_checker_;
std::unique_ptr<RtpSenderContext> rtp_sender_;
RTCPSender rtcp_sender_;