From b36f6896c8067568873e54ecfa2b0a61dd1ffc6d Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Thu, 3 Mar 2022 05:55:22 +0900 Subject: [PATCH] Add SequenceChecker on Notifier Bug: None Change-Id: I85e80576d92ddae55a3fbd144338d9c57fb80065 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/252520 Reviewed-by: Artem Titov Auto-Submit: Daniel.L (Byoungchan) Lee Reviewed-by: Harald Alvestrand Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/main@{#36116} --- api/BUILD.gn | 2 ++ api/DEPS | 4 ++++ api/notifier.h | 12 ++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/BUILD.gn b/api/BUILD.gn index 12e0c5cafa..9d9bf55b8b 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -116,10 +116,12 @@ rtc_library("media_stream_interface") { ":audio_options_api", ":rtp_parameters", ":scoped_refptr", + ":sequence_checker", ":video_track_source_constraints", "../modules/audio_processing:audio_processing_statistics", "../rtc_base:checks", "../rtc_base:refcount", + "../rtc_base/system:no_unique_address", "../rtc_base/system:rtc_export", "video:recordable_encoded_frame", "video:video_frame", diff --git a/api/DEPS b/api/DEPS index ff493bf77f..bdeab0ade6 100644 --- a/api/DEPS +++ b/api/DEPS @@ -274,6 +274,10 @@ specific_include_rules = { "+rtc_base/ref_counted_object.h", ], + "notifier\.h": [ + "+rtc_base/system/no_unique_address.h", + ], + "simulated_network\.h": [ "+rtc_base/random.h", "+rtc_base/thread_annotations.h", diff --git a/api/notifier.h b/api/notifier.h index c03b1049eb..fc2480e00a 100644 --- a/api/notifier.h +++ b/api/notifier.h @@ -14,7 +14,9 @@ #include #include "api/media_stream_interface.h" +#include "api/sequence_checker.h" #include "rtc_base/checks.h" +#include "rtc_base/system/no_unique_address.h" namespace webrtc { @@ -23,14 +25,16 @@ namespace webrtc { template class Notifier : public T { public: - Notifier() {} + Notifier() { sequence_checker_.Detach(); } virtual void RegisterObserver(ObserverInterface* observer) { + RTC_DCHECK_RUN_ON(&sequence_checker_); RTC_DCHECK(observer != nullptr); observers_.push_back(observer); } virtual void UnregisterObserver(ObserverInterface* observer) { + RTC_DCHECK_RUN_ON(&sequence_checker_); for (std::list::iterator it = observers_.begin(); it != observers_.end(); it++) { if (*it == observer) { @@ -41,6 +45,7 @@ class Notifier : public T { } void FireOnChanged() { + RTC_DCHECK_RUN_ON(&sequence_checker_); // Copy the list of observers to avoid a crash if the observer object // unregisters as a result of the OnChanged() call. If the same list is used // UnregisterObserver will affect the list make the iterator invalid. @@ -52,7 +57,10 @@ class Notifier : public T { } protected: - std::list observers_; + std::list observers_ RTC_GUARDED_BY(sequence_checker_); + + private: + RTC_NO_UNIQUE_ADDRESS SequenceChecker sequence_checker_; }; } // namespace webrtc