diff options
author | timothywang <timothywang@google.com> | 2022-05-24 20:51:20 +0800 |
---|---|---|
committer | timothywang <timothywang@google.com> | 2022-06-01 10:56:58 +0800 |
commit | 02c7c6903e8afe9cec01e935075795915cfb1dc1 (patch) | |
tree | 580d558d50500db40c78d522be22609fa03f47a9 | |
parent | 3b83dc695125192b07ca0b79bd91830f9859484a (diff) | |
download | camera-02c7c6903e8afe9cec01e935075795915cfb1dc1.tar.gz |
Reduce result lock scopeandroid13-dev
Result lock is used to protect pending results. Reduce the scope to
prevent potential deadlock.
Bug: 211162732
Test: GCA, CTS
Change-Id: I19204b9f685c940887bdae9172eb892c69bf4441
-rw-r--r-- | common/hal/utils/result_dispatcher.cc | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/common/hal/utils/result_dispatcher.cc b/common/hal/utils/result_dispatcher.cc index 2d6d120..0a4832c 100644 --- a/common/hal/utils/result_dispatcher.cc +++ b/common/hal/utils/result_dispatcher.cc @@ -240,27 +240,29 @@ status_t ResultDispatcher::AddShutter(uint32_t frame_number, int64_t timestamp_ns, int64_t readout_timestamp_ns) { ATRACE_CALL(); - std::lock_guard<std::mutex> lock(result_lock_); + { + std::lock_guard<std::mutex> lock(result_lock_); - auto shutter_it = pending_shutters_.find(frame_number); - if (shutter_it == pending_shutters_.end()) { - ALOGE("%s: Cannot find the pending shutter for frame %u", __FUNCTION__, - frame_number); - return NAME_NOT_FOUND; - } + auto shutter_it = pending_shutters_.find(frame_number); + if (shutter_it == pending_shutters_.end()) { + ALOGE("%s: Cannot find the pending shutter for frame %u", __FUNCTION__, + frame_number); + return NAME_NOT_FOUND; + } - if (shutter_it->second.ready) { - ALOGE("%s: Already received shutter (%" PRId64 - ") for frame %u. New " - "timestamp %" PRId64, - __FUNCTION__, shutter_it->second.timestamp_ns, frame_number, - timestamp_ns); - return ALREADY_EXISTS; - } + if (shutter_it->second.ready) { + ALOGE("%s: Already received shutter (%" PRId64 + ") for frame %u. New " + "timestamp %" PRId64, + __FUNCTION__, shutter_it->second.timestamp_ns, frame_number, + timestamp_ns); + return ALREADY_EXISTS; + } - shutter_it->second.timestamp_ns = timestamp_ns; - shutter_it->second.readout_timestamp_ns = readout_timestamp_ns; - shutter_it->second.ready = true; + shutter_it->second.timestamp_ns = timestamp_ns; + shutter_it->second.readout_timestamp_ns = readout_timestamp_ns; + shutter_it->second.ready = true; + } { std::unique_lock<std::mutex> lock(notify_callback_lock_); is_result_shutter_updated_ = true; |