From 30d84539720ba40c087447b9db03e748aa238b2a Mon Sep 17 00:00:00 2001 From: Richard Yeh Date: Wed, 13 Sep 2023 03:38:24 +0000 Subject: [PATCH] [CfM-R108] xu_camera: Use UI thread for D-Bus. When XuCameraService uses IpPeripheralServiceClient to send dbus commands to IpPeripheralService, it must use the UI thread. (https://chromium.googlesource.com/chromiumos/docs/+/HEAD/dbus_in_chrome.md#using-system-daemons_d_bus-services) Without this change, on M108, gdb showed that we were crashing in `ObjectProxy::CallMethodWithErrorResponse' on `bus_->AssertOnOriginThread();` at https://source.chromium.org/chromium/chromium/src/+/main:dbus/object_proxy.cc;l=169 BUG=b:284299455 TESTED=Endeavour on R108-15183.82.41 and Falcon camera on 1.5.17 Change-Id: I7fc001b329e8ad4ecbe4fa263d2ef5f5a27aeea1 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4859064 Commit-Queue: Richard Yeh Owners-Override: Richard Yeh Reviewed-by: Kyle Williams Cr-Commit-Position: refs/branch-heads/5359_179@{#37} Cr-Branched-From: 296508e5a82fc4a91fb615910a6978f20f0639d2-refs/branch-heads/5359@{#1312} Cr-Branched-From: 27d3765d341b09369006d030f83f582a29eb57ae-refs/heads/main@{#1058933} --- .../xu_camera/xu_camera_service.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/chrome/browser/ash/chromebox_for_meetings/xu_camera/xu_camera_service.cc b/chrome/browser/ash/chromebox_for_meetings/xu_camera/xu_camera_service.cc index 001e7f0071b0f3..92844a13209e3b 100644 --- a/chrome/browser/ash/chromebox_for_meetings/xu_camera/xu_camera_service.cc +++ b/chrome/browser/ash/chromebox_for_meetings/xu_camera/xu_camera_service.cc @@ -438,8 +438,11 @@ void XuCameraService::GetCtrlWithDevicePath( switch (ctrl->which()) { case mojom::CtrlType::Tag::kQueryCtrl: if (is_ip_camera) { - GetCtrlDbus(*dev_path, std::move(ctrl->get_query_ctrl()), - GetRequest(fn), std::move(callback)); + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, base::BindOnce(&XuCameraService::GetCtrlDbus, + weak_factory_.GetWeakPtr(), *dev_path, + std::move(ctrl->get_query_ctrl()), + GetRequest(fn), std::move(callback))); return; } error_code = @@ -498,8 +501,11 @@ void XuCameraService::SetCtrlWithDevicePath( switch (ctrl->which()) { case mojom::CtrlType::Tag::kQueryCtrl: if (is_ip_camera) { - SetCtrlDbus(*dev_path, std::move(ctrl->get_query_ctrl()), data_, - std::move(callback)); + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, base::BindOnce(&XuCameraService::SetCtrlDbus, + weak_factory_.GetWeakPtr(), *dev_path, + std::move(ctrl->get_query_ctrl()), data_, + std::move(callback))); return; } error_code =