Fix Launchpad Recovery Feature 46/238246/5
authorChanggyu Choi <changyu.choi@samsung.com>
Fri, 10 Jul 2020 02:45:03 +0000 (11:45 +0900)
committerChanggyu Choi <changyu.choi@samsung.com>
Fri, 10 Jul 2020 04:42:31 +0000 (13:42 +0900)
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 <changyu.choi@samsung.com>
packaging/launchpad-process-pool.socket
src/launchpad/src/launchpad.c

index 44edc7d..515d5e0 100644 (file)
@@ -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]
index 1f1d21c..9db8b9d 100644 (file)
@@ -18,6 +18,7 @@
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <systemd/sd-daemon.h>
 #include <sys/prctl.h>
 #include <sys/socket.h>
 #include <sys/un.h>
@@ -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;
 }