Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 454bfd9e authored by Steven Moreland's avatar Steven Moreland
Browse files

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
parent dcc3db7b
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */

#include <android-base/logging.h>
#include <android-base/properties.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/Status.h>
@@ -26,15 +27,14 @@
#include "ServiceManager.h"

using ::android::Access;
using ::android::sp;
using ::android::IPCThreadState;
using ::android::Looper;
using ::android::LooperCallback;
using ::android::ProcessState;
using ::android::IPCThreadState;
using ::android::ProcessState;
using ::android::ServiceManager;
using ::android::os::IServiceManager;
using ::android::sp;
using ::android::base::SetProperty;
using ::android::os::IServiceManager;

class BinderCallback : public LooperCallback {
public:
@@ -140,6 +140,12 @@ int main(int argc, char** argv) {
    BinderCallback::setupTo(looper);
    ClientCallbackCallback::setupTo(looper, manager);

#ifndef VENDORSERVICEMANAGER
    if (!SetProperty("servicemanager.ready", "true")) {
        LOG(ERROR) << "Failed to set servicemanager ready property";
    }
#endif

    while(true) {
        looper->pollAll(-1);
    }
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ service servicemanager /system/bin/servicemanager.microdroid
    user system
    group system readproc
    critical
    onrestart setprop servicemanager.ready false
    onrestart restart apexd
    task_profiles ServiceCapacityLow
    shutdown critical
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ service servicemanager /system/bin/servicemanager
    user system
    group system readproc
    critical
    onrestart setprop servicemanager.ready false
    onrestart restart apexd
    onrestart restart audioserver
    onrestart restart gatekeeperd
+1 −0
Original line number Diff line number Diff line
service servicemanager /system/bin/servicemanager
    disabled
    group system readproc
    onrestart setprop servicemanager.ready false
    seclabel u:r:servicemanager:s0
+11 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <inttypes.h>
#include <unistd.h>

#include <android-base/properties.h>
#include <android/os/BnServiceCallback.h>
#include <android/os/IServiceManager.h>
#include <binder/IPCThreadState.h>
@@ -140,6 +141,16 @@ protected:
sp<IServiceManager> 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<AidlServiceManager> sm = nullptr;
        while (sm == nullptr) {
            sm = interface_cast<AidlServiceManager>(ProcessState::self()->getContextObject(nullptr));