Retry Weaver transactions even when boot not completed
On first boot, Android expects to be able to use Weaver just after it
has started persistent and direct-boot-aware apps such as com.android.se
which provides OMAPI. There is a race condition where these apps might
not have fully started by the time that Weaver is used, which causes the
Weaver implementation in hardware/nxp/weaver/ to return an error. There
is actually already a retry loop in this Weaver implementation, but for
some reason it's disabled before boot has completed. This change makes
the retry loop be run unconditionally, which fixes the problem.
Bug: 356562932
Bug: 358712388
Test: mmm hardware/nxp/weaver
Test: Check Weaver logs for retries from first boot after data wipe
Flag: EXEMPT bugfix
Change-Id: I7a978469aea2ec7e7d1cfd11ee870723e2889fb6
diff --git a/libese_weaver/inc/weaver_transport-impl.h b/libese_weaver/inc/weaver_transport-impl.h
index 5fa4075..2867002 100644
--- a/libese_weaver/inc/weaver_transport-impl.h
+++ b/libese_weaver/inc/weaver_transport-impl.h
@@ -90,8 +90,6 @@
WeaverTransportImpl(const WeaverTransportImpl &) = delete;
/* Private operator overload to make class singleton*/
WeaverTransportImpl &operator=(const WeaverTransportImpl &) = delete;
- /* Private api to detect if device boot completed or not*/
- bool isDeviceBootCompleted();
/* Private self instance for singleton purpose*/
static WeaverTransportImpl *s_instance;
diff --git a/libese_weaver/src/weaver-transport-impl.cpp b/libese_weaver/src/weaver-transport-impl.cpp
index 08f4fd0..37da406 100644
--- a/libese_weaver/src/weaver-transport-impl.cpp
+++ b/libese_weaver/src/weaver-transport-impl.cpp
@@ -18,15 +18,12 @@
#define LOG_TAG "weaver-transport-impl"
#include <TransportFactory.h>
-#include <cutils/properties.h>
#include <vector>
#include <weaver_transport-impl.h>
#include <weaver_utils.h>
#define MAX_RETRY_COUNT 12
#define RETRY_DELAY_INTERVAL_SEC 1
-#define PROP_SYSBOOT_COMPLETED "sys.boot_completed"
-#define SYSBOOT_COMPLETED_VALUE 1
#define IS_APPLET_SELECTION_FAILED(resp) \
(!resp.empty() && resp[0] == APP_NOT_FOUND_SW1 && \
resp[1] == APP_NOT_FOUND_SW2)
@@ -179,10 +176,6 @@
do {
status = sendInternal(data, resp);
if (!status) {
- if (!isDeviceBootCompleted()) {
- LOG_D(TAG, ": Device boot not completed, no retry required");
- break;
- }
if (retry > MAX_RETRY_COUNT) {
LOG_E(TAG, ": completed max retries exit failure");
} else {
@@ -207,17 +200,3 @@
LOG_D(TAG, "Exit");
return status;
}
-
-/**
- * \brief Function to determine if phone boot completed
- *
- * \retval This function return true in case of phone boot
- * completed and false in case not completed.
- */
-bool WeaverTransportImpl::isDeviceBootCompleted() {
- if (property_get_int64(PROP_SYSBOOT_COMPLETED, 0) ==
- SYSBOOT_COMPLETED_VALUE) {
- return true;
- }
- return false;
-}