From 454bfd9e438094b29d69d63274063fdc67e69544 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Wed, 20 Jul 2022 20:53:36 +0000 Subject: servicemanager started property If something starts before servicemanager does, intelligently wait for servicemanager to start rather than sleeping for 1s. Bug: 239382640 Test: boot Change-Id: Ic3df299d8b37c2caeeac4ae90402e7f5be1e7ecc --- libs/binder/IServiceManager.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'libs/binder/IServiceManager.cpp') diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index fd47783acd..c0a8d74195 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -140,6 +141,16 @@ protected: sp defaultServiceManager() { std::call_once(gSmOnce, []() { +#if defined(__BIONIC__) && !defined(__ANDROID_VNDK__) + /* wait for service manager */ { + using std::literals::chrono_literals::operator""s; + using android::base::WaitForProperty; + while (!WaitForProperty("servicemanager.ready", "true", 1s)) { + ALOGE("Waited for servicemanager.ready for a second, waiting another..."); + } + } +#endif + sp sm = nullptr; while (sm == nullptr) { sm = interface_cast(ProcessState::self()->getContextObject(nullptr)); -- cgit v1.2.3-59-g8ed1b