summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYi-Yo Chiang <yochiang@google.com>2022-08-09 20:09:19 +0800
committerYi-Yo Chiang <yochiang@google.com>2022-08-10 14:39:02 +0800
commit457b9c773b25a9754fb2bc67780307d55fec02c7 (patch)
treeb3e036517c6509fc92669595e9c343439c72947e
parent6c1043f18e2f825780c3af91a5567a5915ba04b8 (diff)
downloadgsid-457b9c773b25a9754fb2bc67780307d55fec02c7.tar.gz
libgsid: Document quirks of GetGsiService()
GetGsiService() blocks for at least one full second if the caller (binder client) didn't start a threadpool. Document this quirk in the header so future users don't fall into this performance pitfall. Make libgsid actually include libgsid.h. This fixes codesearch cross reference, I hope. Bug: 241739850 Test: Presubmit Change-Id: Ic846b2d9d8aeb09afe06deec65b0ad6ea2f57186
-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 {