summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortimothywang <timothywang@google.com>2022-05-24 20:51:20 +0800
committertimothywang <timothywang@google.com>2022-06-01 10:56:58 +0800
commit02c7c6903e8afe9cec01e935075795915cfb1dc1 (patch)
tree580d558d50500db40c78d522be22609fa03f47a9
parent3b83dc695125192b07ca0b79bd91830f9859484a (diff)
downloadcamera-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.cc38
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;