Merge "Update makefiles."
diff --git a/transport/ServiceManagement.cpp b/transport/ServiceManagement.cpp
index cc31d9e..9eccede 100644
--- a/transport/ServiceManagement.cpp
+++ b/transport/ServiceManagement.cpp
@@ -29,6 +29,7 @@
#include <hidl/Status.h>
#include <android-base/logging.h>
+#include <android-base/properties.h>
#include <hidl-util/FQName.h>
#include <hidl-util/StringHelper.h>
#include <hwbinder/IPCThreadState.h>
@@ -42,6 +43,8 @@
#define RE_PATH RE_COMPONENT "(?:[.]" RE_COMPONENT ")*"
static const std::regex gLibraryFileNamePattern("(" RE_PATH "@[0-9]+[.][0-9]+)-impl(.*?).so");
+using android::base::WaitForProperty;
+
using android::hidl::manager::V1_0::IServiceManager;
using android::hidl::manager::V1_0::IServiceNotification;
using android::hidl::manager::V1_0::BpHwServiceManager;
@@ -55,6 +58,16 @@
extern sp<android::hidl::manager::V1_0::IServiceManager> gDefaultServiceManager;
} // namespace details
+static const char* kHwServicemanagerReadyProperty = "hwservicemanager.ready";
+
+void waitForHwServiceManager() {
+ using std::literals::chrono_literals::operator""s;
+
+ while (!WaitForProperty(kHwServicemanagerReadyProperty, "true", 1s)) {
+ LOG(WARNING) << "Waited for hwservicemanager.ready for a second, waiting another...";
+ }
+}
+
sp<IServiceManager> defaultServiceManager() {
{
@@ -67,11 +80,15 @@
// this process.
return nullptr;
}
+
+ waitForHwServiceManager();
+
while (details::gDefaultServiceManager == NULL) {
details::gDefaultServiceManager =
fromBinder<IServiceManager, BpHwServiceManager, BnHwServiceManager>(
ProcessState::self()->getContextObject(NULL));
if (details::gDefaultServiceManager == NULL) {
+ LOG(ERROR) << "Waited for hwservicemanager, but got nullptr.";
sleep(1);
}
}