Camera: Avoid holding locks during extension initialization
Holding the interface lock while initializing the extension
is not really necessary and can potentially result in a deadlock
in case of failure where callbacks try to close the camera capture
session in the handler thread, and another thread tries to close
the camera device acquiring the interface lock there:
Thread1:
CameraDeviceImpl.close()
acquire the device interface lock
release advanced extension
try to acquire the extension characteristics lock
Thread2:
InitializationSessionHandler.onFailure()
while holding the extension characteristics lock
mCaptureSession.close()
try to acquire the device interface lock
Additionally re-use the device interface lock for the extension session
synchronization. There is no real need to use a separate lock which
complicates the lock acquire order.
Bug: 270276341
Test: atest -c -d
cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionSessionTest.java
Change-Id: Ice808c8d5538e3adb3220d7ea51dea4b14cc2f44
2 files changed