From 1e67b5ff2e8016d506cb29900b476435f03cb3a3 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Fri, 6 Apr 2012 17:35:47 +0300 Subject: CameraHal: Remove lock queries from 'mParams' during 'getParameters()' - A race condition with 'set3ALock()' is possible, which can lead to a segfault during calls to 'getParameters()'. Bug: 6255665 Change-Id: Id64cf3ccfa1e47501d7ba0fb892f2f72329a2ad6 Signed-off-by: Emilian Peev --- camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'camera') diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index 180b441..11ecf0f 100755 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -33,6 +33,8 @@ static int mDebugFps = 0; static int mDebugFcs = 0; +#undef TRUE +#undef FALSE #define HERE(Msg) {CAMHAL_LOGEB("--===line %d, %s===--\n", __LINE__, Msg);} @@ -739,17 +741,21 @@ void OMXCameraAdapter::getParameters(CameraParameters& params) } //Populate current lock status - if( (valstr = mParams.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)) != NULL ) - { - CAMHAL_LOGDB("Auto Exposure Lock get %s", mParams.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)); - params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, valstr); - } + if ( mParameters3A.ExposureLock ) { + params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, + CameraParameters::TRUE); + } else { + params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, + CameraParameters::FALSE); + } - if( (valstr = mParams.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)) != NULL ) - { - CAMHAL_LOGDB("Auto WhiteBalance Lock get %s", mParams.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)); - params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, valstr); - } + if ( mParameters3A.WhiteBalanceLock ) { + params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, + CameraParameters::TRUE); + } else { + params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, + CameraParameters::FALSE); + } LOG_FUNCTION_NAME_EXIT; } -- cgit v1.1