Updates socket_forward_region_view for ag/3486191
Open() is now protected, I copied the pattern from the above change.
BUG: 72181993
BUG: 72654144
Change-Id: I38b1a3326a808c01a83c25f56cb9cce859d08fc7
diff --git a/common/commands/socket_forward_proxy/main.cpp b/common/commands/socket_forward_proxy/main.cpp
index ca70fae..4be4588 100644
--- a/common/commands/socket_forward_proxy/main.cpp
+++ b/common/commands/socket_forward_proxy/main.cpp
@@ -153,14 +153,16 @@
}
#endif
-void OpenShm(vsoc::socket_forward::SocketForwardRegionView* shm_ptr) {
- if (!shm_ptr->Open(
+std::shared_ptr<SocketForwardRegionView> GetShm() {
+ auto shm = SocketForwardRegionView::GetInstance(
#ifdef CUTTLEFISH_HOST
- vsoc::GetDomain().c_str()
+ vsoc::GetDomain().c_str()
#endif
- )) {
+ );
+ if (!shm) {
LOG(FATAL) << "Could not open SHM. Aborting.";
}
+ return shm;
}
// makes sure we're running as root on the guest, no-op on the host
@@ -176,14 +178,13 @@
gflags::ParseCommandLineFlags(&argc, &argv, true);
assert_correct_user();
- vsoc::socket_forward::SocketForwardRegionView shm{};
- OpenShm(&shm);
- auto worker = shm.StartWorker();
+ auto shm = GetShm();
+ auto worker = shm->StartWorker();
#ifdef CUTTLEFISH_HOST
CHECK_NE(FLAGS_port, 0u) << "Must specify --port flag";
- host(&shm, FLAGS_port);
+ host(shm.get(), FLAGS_port);
#else
- guest(&shm);
+ guest(shm.get());
#endif
}
diff --git a/common/vsoc/lib/socket_forward_region_view.cpp b/common/vsoc/lib/socket_forward_region_view.cpp
index b56dde4..cf95fa9 100644
--- a/common/vsoc/lib/socket_forward_region_view.cpp
+++ b/common/vsoc/lib/socket_forward_region_view.cpp
@@ -186,6 +186,23 @@
return {-1, -1};
}
+#if defined(CUTTLEFISH_HOST)
+std::shared_ptr<SocketForwardRegionView> SocketForwardRegionView::GetInstance(
+ const char* domain) {
+ return RegionView::GetInstanceImpl<SocketForwardRegionView>(
+ [](std::shared_ptr<SocketForwardRegionView> region, const char* domain) {
+ return region->Open(domain);
+ },
+ domain);
+}
+#else
+std::shared_ptr<SocketForwardRegionView> SocketForwardRegionView::GetInstance()
+{
+ return RegionView::GetInstanceImpl<SocketForwardRegionView>(
+ std::mem_fn(&SocketForwardRegionView::Open));
+}
+#endif
+
#ifdef CUTTLEFISH_HOST
SocketForwardRegionView::Connection SocketForwardRegionView::OpenConnection(
int port) {
diff --git a/common/vsoc/lib/socket_forward_region_view.h b/common/vsoc/lib/socket_forward_region_view.h
index 2930aba..0471a5f 100644
--- a/common/vsoc/lib/socket_forward_region_view.h
+++ b/common/vsoc/lib/socket_forward_region_view.h
@@ -154,6 +154,12 @@
SocketForwardRegionView(const SocketForwardRegionView&) = delete;
SocketForwardRegionView& operator=(const SocketForwardRegionView&) = delete;
+ static std::shared_ptr<SocketForwardRegionView> GetInstance(
+#ifdef CUTTLEFISH_HOST
+ const char* domain
+#endif
+ );
+
#ifdef CUTTLEFISH_HOST
Connection OpenConnection(int port);
#else