Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be8d28a1 authored by Igor Murashkin's avatar Igor Murashkin
Browse files

Camera2: Always disconnect in the client destructor

If Camera2Client failed to initialize, it would skip disconnect step,
and thus the camera would be forever marked as busy. By always calling
disconnect it will always call free.

It also adds a new guarantee that Client::disconnect is idempotent

Bug: 7298182
Change-Id: Ic9876f1665b7d9b3c0da692880f63f165e3f4fa5
parent 2814a4dc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -409,6 +409,9 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
// tear down the client
CameraService::Client::~Client() {
    mCameraService->releaseSound();

    // unconditionally disconnect. function is idempotent
    Client::disconnect();
}

// ----------------------------------------------------------------------------
@@ -433,6 +436,7 @@ CameraService::Client* CameraService::Client::getClientFromCookie(void* user) {
    return client;
}

// NOTE: function is idempotent
void CameraService::Client::disconnect() {
    mCameraService->removeClient(mCameraClient);
    mCameraService->setCameraFree(mCameraId);