diff --git a/camera/device/default/ExternalCameraDeviceSession.cpp b/camera/device/default/ExternalCameraDeviceSession.cpp index c9629744c2..95a36f0615 100644 --- a/camera/device/default/ExternalCameraDeviceSession.cpp +++ b/camera/device/default/ExternalCameraDeviceSession.cpp @@ -224,10 +224,6 @@ void ExternalCameraDeviceSession::initOutputThread() { } void ExternalCameraDeviceSession::closeOutputThread() { - closeOutputThreadImpl(); -} - -void ExternalCameraDeviceSession::closeOutputThreadImpl() { if (mOutputThread != nullptr) { mOutputThread->flush(); mOutputThread->requestExitAndWait(); @@ -235,6 +231,13 @@ void ExternalCameraDeviceSession::closeOutputThreadImpl() { } } +void ExternalCameraDeviceSession::closeBufferRequestThread() { + if (mBufferRequestThread != nullptr) { + mBufferRequestThread->requestExitAndWait(); + mBufferRequestThread.reset(); + } +} + Status ExternalCameraDeviceSession::initStatus() const { Mutex::Autolock _l(mLock); Status status = Status::OK; @@ -248,7 +251,7 @@ Status ExternalCameraDeviceSession::initStatus() const { ExternalCameraDeviceSession::~ExternalCameraDeviceSession() { if (!isClosed()) { ALOGE("ExternalCameraDeviceSession deleted before close!"); - close(/*callerIsDtor*/ true); + closeImpl(); } } @@ -1411,19 +1414,16 @@ Status ExternalCameraDeviceSession::importBufferLocked(int32_t streamId, uint64_ } ScopedAStatus ExternalCameraDeviceSession::close() { - close(false); + closeImpl(); return fromStatus(Status::OK); } -void ExternalCameraDeviceSession::close(bool callerIsDtor) { +void ExternalCameraDeviceSession::closeImpl() { Mutex::Autolock _il(mInterfaceLock); bool closed = isClosed(); if (!closed) { - if (callerIsDtor) { - closeOutputThreadImpl(); - } else { - closeOutputThread(); - } + closeOutputThread(); + closeBufferRequestThread(); Mutex::Autolock _l(mLock); // free all buffers diff --git a/camera/device/default/ExternalCameraDeviceSession.h b/camera/device/default/ExternalCameraDeviceSession.h index e7eb799da2..836266f3de 100644 --- a/camera/device/default/ExternalCameraDeviceSession.h +++ b/camera/device/default/ExternalCameraDeviceSession.h @@ -240,9 +240,9 @@ class ExternalCameraDeviceSession : public BnCameraDeviceSession, public OutputT // To init/close different version of output thread void initOutputThread(); void closeOutputThread(); - void closeOutputThreadImpl(); + void closeBufferRequestThread(); - void close(bool callerIsDtor); + void closeImpl(); Status initStatus() const; status_t initDefaultRequests();