From 84915368946a09a56b757add53fde3f917d73b2a Mon Sep 17 00:00:00 2001 From: Changgyu Choi Date: Fri, 10 Jul 2020 11:45:03 +0900 Subject: [PATCH] Fix Launchpad Recovery Feature Add to select ".launchpad-process-pool-sock". ".luanchpad-recovery-sock" is just used socket activation for recovery. Change-Id: I73e5dd59bbb99b2e24f25a84437284742dc337fe Signed-off-by: Changgyu Choi --- packaging/launchpad-process-pool.socket | 1 + src/launchpad/src/launchpad.c | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packaging/launchpad-process-pool.socket b/packaging/launchpad-process-pool.socket index 44edc7d..515d5e0 100644 --- a/packaging/launchpad-process-pool.socket +++ b/packaging/launchpad-process-pool.socket @@ -1,5 +1,6 @@ [Socket] ListenStream=/run/aul/daemons/%U/.launchpad-process-pool-sock +ListenStream=/run/aul/daemons/%U/.launchpad-recovery-sock DirectoryMode=0777 [Install] diff --git a/src/launchpad/src/launchpad.c b/src/launchpad/src/launchpad.c index 1f1d21c..9db8b9d 100644 --- a/src/launchpad/src/launchpad.c +++ b/src/launchpad/src/launchpad.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -673,7 +674,7 @@ static int __listen_candidate_process(int type, int loader_id) memset(&addr, 0x00, sizeof(struct sockaddr_un)); addr.sun_family = AF_UNIX; - snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/daemons/%d/%s%d-%d", + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/daemons/%u/%s%d-%d", SOCKET_PATH, getuid(), LAUNCHPAD_LOADER_SOCKET_NAME, type, loader_id); @@ -1343,15 +1344,21 @@ static int __launch_directly(const char *appid, const char *app_path, int clifd, static int __create_sock_activation(void) { int fds; + char launchpad_process_pool_sock_path[108]; + int i; fds = sd_listen_fds(0); - if (fds == 1) - return SD_LISTEN_FDS_START; - else if (fds > 1) - _E("Too many file descriptors received."); - else - _D("There is no socket stream"); + snprintf(launchpad_process_pool_sock_path, + sizeof(launchpad_process_pool_sock_path), "%s/daemons/%u/%s", + SOCKET_PATH, getuid(), PROCESS_POOL_LAUNCHPAD_SOCK); + + for (i = SD_LISTEN_FDS_START; i < SD_LISTEN_FDS_START + fds; ++i) { + if (sd_is_socket_unix(i, SOCK_STREAM, 1, + launchpad_process_pool_sock_path, 0) > 0) + return i; + } + _W("There is no socket stream"); return -1; } -- 2.7.4