Snap for 7599941 from 03c4ce23715ccf0dae1ce18a722f4bcc99b90860 to sc-release
Change-Id: I952b54b77f93689b71b0548250b538da0c27ccdc
diff --git a/common/hal/utils/result_dispatcher.cc b/common/hal/utils/result_dispatcher.cc
index bf34ede..6443e8f 100644
--- a/common/hal/utils/result_dispatcher.cc
+++ b/common/hal/utils/result_dispatcher.cc
@@ -228,8 +228,11 @@
failed = true;
}
}
-
- notify_callback_condition_.notify_one();
+ {
+ std::unique_lock<std::mutex> lock(notify_callback_lock);
+ is_result_shutter_updated_ = true;
+ notify_callback_condition_.notify_one();
+ }
return failed ? UNKNOWN_ERROR : OK;
}
@@ -256,8 +259,11 @@
shutter_it->second.timestamp_ns = timestamp_ns;
shutter_it->second.ready = true;
-
- notify_callback_condition_.notify_one();
+ {
+ std::unique_lock<std::mutex> lock(notify_callback_lock);
+ is_result_shutter_updated_ = true;
+ notify_callback_condition_.notify_one();
+ }
return OK;
}
@@ -393,12 +399,14 @@
ALOGV("%s: NotifyCallbackThreadLoop exits.", __FUNCTION__);
return;
}
-
- if (notify_callback_condition_.wait_for(
- lock, std::chrono::milliseconds(kCallbackThreadTimeoutMs)) ==
- std::cv_status::timeout) {
- PrintTimeoutMessages();
+ if (!is_result_shutter_updated_) {
+ if (notify_callback_condition_.wait_for(
+ lock, std::chrono::milliseconds(kCallbackThreadTimeoutMs)) ==
+ std::cv_status::timeout) {
+ PrintTimeoutMessages();
+ }
}
+ is_result_shutter_updated_ = false;
}
}
diff --git a/common/hal/utils/result_dispatcher.h b/common/hal/utils/result_dispatcher.h
index ba97086..74f4b4a 100644
--- a/common/hal/utils/result_dispatcher.h
+++ b/common/hal/utils/result_dispatcher.h
@@ -187,6 +187,9 @@
// Protected by notify_callback_lock.
bool notify_callback_thread_exiting = false;
+
+ // State of callback thread is notified or not.
+ volatile bool is_result_shutter_updated_ = false;
};
} // namespace google_camera_hal