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

Commit e82eaa84 authored by Jon Spivack's avatar Jon Spivack Committed by Nikita Ioffe
Browse files

Add flag to cmd for dynamic services

When cmd is called with the -w flag, it will call ServiceManager::waitForService instead of checkService. This will make dynamic services start and block until they are ready for use.

Bug: 149526916
Test: atest ApexRollbackTests (with and without this flag applied within for dynamic apexd)
Change-Id: Iad0c3d7aa75e5830da10a84bd753d3011438259f
Merged-In: Iad0c3d7aa75e5830da10a84bd753d3011438259f
(cherry picked from commit 77f83368)
parent 196feae6
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ int cmdMain(const std::vector<std::string_view>& argv, TextOutput& outputLog, Te
    int argc = argv.size();

    if (argc == 0) {
        errorLog << "cmd: No service specified; use -l to list all services" << endl;
        errorLog << "cmd: No service specified; use -l to list all running services. Use -w to start and wait for a service." << endl;
        return 20;
    }

@@ -203,14 +203,22 @@ int cmdMain(const std::vector<std::string_view>& argv, TextOutput& outputLog, Te
        return 0;
    }

    const auto cmd = argv[0];
    bool waitForService = ((argc > 1) && (argv[0] == "-w"));
    int serviceIdx = (waitForService) ? 1 : 0;
    const auto cmd = argv[serviceIdx];

    Vector<String16> args;
    String16 serviceName = String16(cmd.data(), cmd.size());
    for (int i = 1; i < argc; i++) {
    for (int i = serviceIdx + 1; i < argc; i++) {
        args.add(String16(argv[i].data(), argv[i].size()));
    }
    sp<IBinder> service = sm->checkService(serviceName);
    sp<IBinder> service;
    if(waitForService) {
        service = sm->waitForService(serviceName);
    } else {
        service = sm->checkService(serviceName);
    }

    if (service == nullptr) {
        if (runMode == RunMode::kStandalone) {
            ALOGW("Can't find service %.*s", static_cast<int>(cmd.size()), cmd.data());