From 6250fdd8fc5323c073c50668c3d1d5eee4991006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Fri, 15 Jun 2018 10:34:52 +0200 Subject: [PATCH] Delete FakeWebRtcVcmFactory::OnDestroyed method. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This was called by FakeWebRtcVideoCaptureModule's destructor. However, since the factory keeps a reference counted pointer to each FakeWebRtcVideoCaptureModule it has created, no module is destroyed until the factory is destroyed. And at that point, coordination is not needed and actually broken, since OnDestroyed results in Release being called on an object halfway through the destruction sequence. Bug: webrtc:9405 Change-Id: I0cf3acb49b58e2b6b83344d840835f594418f7c7 Reviewed-on: https://webrtc-review.googlesource.com/83721 Reviewed-by: Magnus Jedvert Reviewed-by: Artem Titov Commit-Queue: Patrik Höglund Cr-Commit-Position: refs/heads/master@{#23644} --- media/engine/fakewebrtcvcmfactory.h | 10 +--------- media/engine/fakewebrtcvideocapturemodule.h | 9 +++------ 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/media/engine/fakewebrtcvcmfactory.h b/media/engine/fakewebrtcvcmfactory.h index 70931e129a..abd69ea78b 100644 --- a/media/engine/fakewebrtcvcmfactory.h +++ b/media/engine/fakewebrtcvcmfactory.h @@ -25,7 +25,7 @@ class FakeWebRtcVcmFactory : public cricket::WebRtcVcmFactoryInterface { const char* device_id) { if (!device_info.GetDeviceById(device_id)) return NULL; rtc::scoped_refptr module( - new rtc::RefCountedObject(this)); + new rtc::RefCountedObject()); modules.push_back(module); return module; } @@ -34,16 +34,8 @@ class FakeWebRtcVcmFactory : public cricket::WebRtcVcmFactoryInterface { } virtual void DestroyDeviceInfo(webrtc::VideoCaptureModule::DeviceInfo* info) { } - void OnDestroyed(webrtc::VideoCaptureModule* module) { - std::remove(modules.begin(), modules.end(), module); - } FakeWebRtcDeviceInfo device_info; std::vector> modules; }; -FakeWebRtcVideoCaptureModule::~FakeWebRtcVideoCaptureModule() { - if (factory_) - factory_->OnDestroyed(this); -} - #endif // MEDIA_ENGINE_FAKEWEBRTCVCMFACTORY_H_ diff --git a/media/engine/fakewebrtcvideocapturemodule.h b/media/engine/fakewebrtcvideocapturemodule.h index 0778abbcaa..741b5be785 100644 --- a/media/engine/fakewebrtcvideocapturemodule.h +++ b/media/engine/fakewebrtcvideocapturemodule.h @@ -18,14 +18,12 @@ #include "media/engine/webrtcvideocapturer.h" #include "rtc_base/task_queue_for_test.h" -class FakeWebRtcVcmFactory; - // Fake class for mocking out webrtc::VideoCaptureModule. class FakeWebRtcVideoCaptureModule : public webrtc::VideoCaptureModule { public: - explicit FakeWebRtcVideoCaptureModule(FakeWebRtcVcmFactory* factory) - : factory_(factory), callback_(NULL), running_(false) {} - ~FakeWebRtcVideoCaptureModule(); + FakeWebRtcVideoCaptureModule() + : callback_(NULL), running_(false) {} + ~FakeWebRtcVideoCaptureModule() {} void RegisterCaptureDataCallback( rtc::VideoSinkInterface* callback) override { callback_ = callback; @@ -81,7 +79,6 @@ class FakeWebRtcVideoCaptureModule : public webrtc::VideoCaptureModule { private: rtc::test::TaskQueueForTest task_queue_{"FakeWebRtcVideoCaptureModule"}; - FakeWebRtcVcmFactory* factory_; rtc::VideoSinkInterface* callback_; bool running_; webrtc::VideoCaptureCapability cap_;