summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYi-Yo Chiang <yochiang@google.com>2022-08-11 08:10:41 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-08-11 08:10:41 +0000
commitc95e65dd06e537b356babcc2e44335781f763e91 (patch)
treeb3e036517c6509fc92669595e9c343439c72947e
parent5e533f324028322f9dd9c26eb0b1cc0dc0cfbca1 (diff)
parent90b1fe15f3f847aabc4ad53ef007f707c9b49a83 (diff)
downloadgsid-c95e65dd06e537b356babcc2e44335781f763e91.tar.gz
libgsid: Document quirks of GetGsiService() am: 457b9c773b am: f9a092151b am: 81925c61bc am: a08c114f98 am: 90b1fe15f3
Original change: https://android-review.googlesource.com/c/platform/system/gsid/+/2179376 Change-Id: Ice08ed1b9da62cb220bd888bf1383c3dc693ee4d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--daemon.cpp2
-rw-r--r--gsi_service.cpp4
-rw-r--r--gsi_service.h2
-rw-r--r--gsi_tool.cpp3
-rw-r--r--include/libgsi/libgsi.h2
-rw-r--r--include/libgsi/libgsid.h4
-rw-r--r--libgsid.cpp2
7 files changed, 12 insertions, 7 deletions
diff --git a/daemon.cpp b/daemon.cpp
index 2123599..33e7705 100644
--- a/daemon.cpp
+++ b/daemon.cpp
@@ -65,7 +65,7 @@ int main(int argc, char** argv) {
}
}
- android::gsi::GsiService::Register();
+ android::gsi::GsiService::Register(android::gsi::kGsiServiceName);
{
sp<ProcessState> ps(ProcessState::self());
ps->startThreadPool();
diff --git a/gsi_service.cpp b/gsi_service.cpp
index 10bbb51..75f9286 100644
--- a/gsi_service.cpp
+++ b/gsi_service.cpp
@@ -87,10 +87,10 @@ GsiService::GsiService() {
progress_ = {};
}
-void GsiService::Register() {
+void GsiService::Register(const std::string& name) {
auto lazyRegistrar = LazyServiceRegistrar::getInstance();
android::sp<GsiService> service = new GsiService();
- auto ret = lazyRegistrar.registerService(service, kGsiServiceName);
+ auto ret = lazyRegistrar.registerService(service, name);
if (ret != android::OK) {
LOG(FATAL) << "Could not register gsi service: " << ret;
diff --git a/gsi_service.h b/gsi_service.h
index c50c101..3c4c278 100644
--- a/gsi_service.h
+++ b/gsi_service.h
@@ -36,7 +36,7 @@ namespace gsi {
class GsiService : public BinderService<GsiService>, public BnGsiService {
public:
- static void Register();
+ static void Register(const std::string& name);
binder::Status openInstall(const std::string& install_dir, int* _aidl_return) override;
binder::Status closeInstall(int32_t* _aidl_return) override;
diff --git a/gsi_tool.cpp b/gsi_tool.cpp
index a6a79a5..181452b 100644
--- a/gsi_tool.cpp
+++ b/gsi_tool.cpp
@@ -35,6 +35,7 @@
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
#include <android/gsi/IGsiService.h>
+#include <binder/ProcessState.h>
#include <cutils/android_reboot.h>
#include <libgsi/libgsi.h>
#include <libgsi/libgsid.h>
@@ -714,6 +715,8 @@ static int usage(int /* argc */, char* argv[]) {
int main(int argc, char** argv) {
android::base::InitLogging(argv, android::base::StderrLogger, android::base::DefaultAborter);
+ // Start a threadpool to service waitForService() callbacks.
+ android::ProcessState::self()->startThreadPool();
android::sp<IGsiService> service = GetGsiService();
if (!service) {
return EX_SOFTWARE;
diff --git a/include/libgsi/libgsi.h b/include/libgsi/libgsi.h
index 41898df..5318341 100644
--- a/include/libgsi/libgsi.h
+++ b/include/libgsi/libgsi.h
@@ -24,8 +24,6 @@
namespace android {
namespace gsi {
-static constexpr char kGsiServiceName[] = "gsiservice";
-
#define DSU_METADATA_PREFIX "/metadata/gsi/dsu/"
// These files need to be globally readable so that fs_mgr_fstab, which is
diff --git a/include/libgsi/libgsid.h b/include/libgsi/libgsid.h
index 46f8ef5..1229ce7 100644
--- a/include/libgsi/libgsid.h
+++ b/include/libgsi/libgsid.h
@@ -21,6 +21,10 @@
namespace android {
namespace gsi {
+static constexpr char kGsiServiceName[] = "gsiservice";
+
+// Caller should start a threadpool before calling this method, otherwise waitForService() could
+// block for at least 1 second.
android::sp<IGsiService> GetGsiService();
} // namespace gsi
diff --git a/libgsid.cpp b/libgsid.cpp
index 23eeae4..4689dcd 100644
--- a/libgsid.cpp
+++ b/libgsid.cpp
@@ -17,7 +17,7 @@
#include <android-base/logging.h>
#include <android/gsi/IGsiService.h>
#include <binder/IServiceManager.h>
-#include <libgsi/libgsi.h>
+#include <libgsi/libgsid.h>
namespace android {
namespace gsi {