VCD: Migrate to use SetCallbacksAssociated
This addresses a subtle race condition in CameraModuleCallbacks::SetCallbacks(). The key sequence of events, 1. CameraHalClient receives a pending remote of CameraModule 2. CameraHalClient calls CameraModule::GetNumberOfCameras() 3. CameraHalClient calls CameraModule::SetCallbacks() to pass a pending remote of CameraModuleCallbacks. 4. CameraModule receiver would fire CameraModuleCallbacks::CameraDeviceStatusChange() 5. CameraModule receiver then fires CameraModule::SetCallbacksCallback The expectation was that 4 would be received before 5. However, since CameraModule and CameraModuleCallbacks run on different message pipes, 4 can actually be received after 5, not meeting the expectation. So here we make CameraModuleCallbacks an associated interface of CameraModule. Please see crrev.com/c/2434712 for the implementation on CameraModule. Bug: b/169324225 Test: With the following, 1. Open Chrome Camera App (CCA) 2. restart cros-camera 3. Verify CameraDeviceStatusChange is received before SetCallbacksCallback 4. Repeat and passes 20/20 times. Additionally, 1. Build capture_unittests and scp to DUT 2. tast run dut 'camera.CaptureUnittests' Change-Id: I79f6006b7827d2e556b01e7d57df43916ca7913e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2470898Reviewed-by:Wei Lee <wtlee@chromium.org> Reviewed-by:
Daniel Cheng <dcheng@chromium.org> Commit-Queue: Daniel Cheng <dcheng@chromium.org> Cr-Commit-Position: refs/heads/master@{#841019}
Showing
Please register or sign in to comment