camera2ndk: ~ACameraCaptureSession shouldn't hold device lock in ACameraDevice_close().
We call disconnectLocked before stopping CameraDevice's looper, in order to avoid this situation: 1) Its possible that an OnResultReceived callback is received, and posts an AMessage with sp<ACameraCaptureSession> on CameraDevice's looper. 2) Before the looper message is processsed, ACameraDevice_close() is called by the client, which results in the looper being stopped and cleared with device lock held. 3) When the looper is getting cleared, the AMessage containg the ACameraCaptureSession pointer is destructed leading to ~ACameraCaptureSession running without knowing that the device is being closed, as a result it tries to hold device lock, resulting in a deadlock. Bug: 141603005 Test: CTS native tests Test: use camera2 vndk client for extended periods of time Change-Id: Ia0d47fc2975981055cd1f2103c1cbe8d76642fe4 Signed-off-by: Jayant Chowdhary <jchowdhary@google.com> (cherry picked from commit a8bf1c6e)
Loading
Please register or sign in to comment