summaryrefslogtreecommitdiff
path: root/gsi_tool.cpp
diff options
context:
space:
mode:
authorDavid Anderson <dvander@google.com>2019-07-12 14:18:37 -0700
committerDavid Anderson <dvander@google.com>2019-07-29 11:35:12 -0700
commit4c75673a121e055a258e8710de2a4ec9c263c68f (patch)
tree6d9b43b5fdb846ae335846d4312de302d689524d /gsi_tool.cpp
parent1fdec26f4fc748768ccba2a67a9adc8147432e51 (diff)
downloadgsid-4c75673a121e055a258e8710de2a4ec9c263c68f.tar.gz
Only shut down gsid when it has no more consumers.
Consumers of gsiservice must now use IGsid for its top-level interface. IGsiService can be acquired through IGsid::getClient. When the last reference to IGsiService is dropped, gsid will cleanly exit. Callers should no longer stop gsid through init. Bug: 133528572 Test: gsid cleanly exits after gsi_tool runs Change-Id: Ie5cb80fa63e61b143f9f27cca96999a5c71dab2c Merged-In: Ie5cb80fa63e61b143f9f27cca96999a5c71dab2c
Diffstat (limited to 'gsi_tool.cpp')
-rw-r--r--gsi_tool.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/gsi_tool.cpp b/gsi_tool.cpp
index f5f549f..c33e645 100644
--- a/gsi_tool.cpp
+++ b/gsi_tool.cpp
@@ -31,6 +31,7 @@
#include <android-base/properties.h>
#include <android-base/unique_fd.h>
#include <android/gsi/IGsiService.h>
+#include <android/gsi/IGsid.h>
#include <binder/IServiceManager.h>
#include <cutils/android_reboot.h>
#include <libgsi/libgsi.h>
@@ -61,7 +62,7 @@ static const std::map<std::string, CommandCallback> kCommandMap = {
// clang-format on
};
-static sp<IGsiService> GetGsiService() {
+static sp<IGsid> GetGsiService() {
if (android::base::GetProperty("init.svc.gsid", "") != "running") {
if (!android::base::SetProperty("ctl.start", "gsid") ||
!android::base::WaitForProperty("init.svc.gsid", "running", 5s)) {
@@ -77,7 +78,7 @@ static sp<IGsiService> GetGsiService() {
auto name = android::String16(kGsiServiceName);
android::sp<android::IBinder> res = sm->checkService(name);
if (res) {
- return android::interface_cast<IGsiService>(res);
+ return android::interface_cast<IGsid>(res);
}
usleep(kSleepTimeMs * 1000);
}
@@ -515,6 +516,13 @@ int main(int argc, char** argv) {
return EX_NOPERM;
}
+ android::sp<IGsiService> service;
+ auto status = gsid->getClient(&service);
+ if (!status.isOk()) {
+ std::cerr << "Could not get gsi client: " << ErrorMessage(status) << "\n";
+ return EX_SOFTWARE;
+ }
+
if (1 >= argc) {
std::cerr << "Expected command." << std::endl;
return EX_USAGE;
@@ -528,6 +536,6 @@ int main(int argc, char** argv) {
return usage(argc, argv);
}
- int rc = iter->second(gsid, argc - 1, argv + 1);
+ int rc = iter->second(service, argc - 1, argv + 1);
return rc;
}