ConnectionContext: remove media engine without blocking.
Bug: webrtc:14449
Change-Id: I445114c14f4d440a5a8cac003266047fe4588dab
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/288580
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38928}
diff --git a/pc/connection_context.cc b/pc/connection_context.cc
index ec6f21c..d048218 100644
--- a/pc/connection_context.cc
+++ b/pc/connection_context.cc
@@ -173,15 +173,8 @@
ConnectionContext::~ConnectionContext() {
RTC_DCHECK_RUN_ON(signaling_thread_);
- worker_thread_->BlockingCall([&] {
- RTC_DCHECK_RUN_ON(worker_thread());
- // While `media_engine_` is const throughout the ConnectionContext's
- // lifetime, it requires destruction to happen on the worker thread. Instead
- // of marking the pointer as non-const, we live with this const_cast<> in
- // the destructor.
- const_cast<std::unique_ptr<cricket::MediaEngineInterface>&>(media_engine_)
- .reset();
- });
+ // `media_engine_` requires destruction to happen on the worker thread.
+ worker_thread_->PostTask([media_engine = std::move(media_engine_)] {});
// Make sure `worker_thread()` and `signaling_thread()` outlive
// `default_socket_factory_` and `default_network_manager_`.
diff --git a/pc/connection_context.h b/pc/connection_context.h
index 0fe20c7..44fc487 100644
--- a/pc/connection_context.h
+++ b/pc/connection_context.h
@@ -122,7 +122,7 @@
// Accessed both on signaling thread and worker thread.
std::unique_ptr<FieldTrialsView> const trials_;
- const std::unique_ptr<cricket::MediaEngineInterface> media_engine_;
+ std::unique_ptr<cricket::MediaEngineInterface> media_engine_;
// This object should be used to generate any SSRC that is not explicitly
// specified by the user (or by the remote party).