From 7ffbd9898911062cea59c1c6b39875be88b66eb3 Mon Sep 17 00:00:00 2001 From: Yin-Chia Yeh Date: Mon, 13 Apr 2020 10:04:23 -0700 Subject: [PATCH] Camera: Fix potentail race condition mDistortionMappers are used in callback thread and request thread. However, callback thread does not query before calling mDistortionMappers[mId.c_str()], this may cause insertion to the map and mDistortionMappers.find may run at the same time. Bug: 153506800, 153457587 Test: Camera CTS Change-Id: I899033bacd355113fbad3e8f7ec76482aa147158 --- .../device3/Camera3OutputUtils.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp b/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp index 4c8366ff57..603f516a42 100644 --- a/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp +++ b/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp @@ -259,13 +259,15 @@ void sendCaptureResult( } // Fix up some result metadata to account for HAL-level distortion correction - status_t res = - states.distortionMappers[states.cameraId.c_str()].correctCaptureResult( - &captureResult.mMetadata); - if (res != OK) { - SET_ERR("Unable to correct capture result metadata for frame %d: %s (%d)", - frameNumber, strerror(-res), res); - return; + status_t res = OK; + auto iter = states.distortionMappers.find(states.cameraId.c_str()); + if (iter != states.distortionMappers.end()) { + res = iter->second.correctCaptureResult(&captureResult.mMetadata); + if (res != OK) { + SET_ERR("Unable to correct capture result metadata for frame %d: %s (%d)", + frameNumber, strerror(-res), res); + return; + } } // Fix up result metadata to account for zoom ratio availabilities between