summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc')
-rw-r--r--third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc b/third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc
index 85b9f20228..106ca1682c 100644
--- a/third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc
+++ b/third_party/libwebrtc/modules/video_capture/linux/camera_portal.cc
@@ -15,6 +15,7 @@
#include "modules/portal/pipewire_utils.h"
#include "modules/portal/xdg_desktop_portal_utils.h"
+#include "rtc_base/synchronization/mutex.h"
namespace webrtc {
@@ -54,7 +55,9 @@ class CameraPortalPrivate {
GAsyncResult* result,
gpointer user_data);
- CameraPortal::PortalNotifier* notifier_ = nullptr;
+ webrtc::Mutex notifier_lock_;
+ CameraPortal::PortalNotifier* notifier_ RTC_GUARDED_BY(&notifier_lock_) =
+ nullptr;
GDBusConnection* connection_ = nullptr;
GDBusProxy* proxy_ = nullptr;
@@ -66,6 +69,11 @@ CameraPortalPrivate::CameraPortalPrivate(CameraPortal::PortalNotifier* notifier)
: notifier_(notifier) {}
CameraPortalPrivate::~CameraPortalPrivate() {
+ {
+ webrtc::MutexLock lock(&notifier_lock_);
+ notifier_ = nullptr;
+ }
+
if (access_request_signal_id_) {
g_dbus_connection_signal_unsubscribe(connection_,
access_request_signal_id_);
@@ -229,7 +237,11 @@ void CameraPortalPrivate::OnOpenResponse(GDBusProxy* proxy,
}
void CameraPortalPrivate::OnPortalDone(RequestResponse result, int fd) {
- notifier_->OnCameraRequestResult(result, fd);
+ webrtc::MutexLock lock(&notifier_lock_);
+ if (notifier_) {
+ notifier_->OnCameraRequestResult(result, fd);
+ notifier_ = nullptr;
+ }
}
CameraPortal::CameraPortal(PortalNotifier* notifier)