[libvirt] [PATCH 19/23] util: remove code spawning with systemd activation env vars

Daniel P. Berrangé berrange at redhat.com
Thu Jun 27 09:54:48 UTC 2019


The only use of this code was removed by:

  commit be78814ae07f092d9c4e71fd82dd1947aba2f029
  Author: Michal Privoznik <mprivozn at redhat.com>
  Date:   Thu Apr 2 14:41:17 2015 +0200

    virNetSocketNewConnectUNIX: Use flocks when spawning a daemon

less than a year after it was first introduced in

  commit 1b807f92dbb617db5b9d551777d3026d8ff0903f
  Author: Martin Kletzander <mkletzan at redhat.com>
  Date:   Wed Jul 16 08:00:19 2014 +0200

    rpc: pass listen FD to the daemon being started
---
 src/libvirt_private.syms     |  1 -
 src/util/vircommand.c        | 99 ------------------------------------
 src/util/vircommand.h        |  2 -
 tests/commanddata/test24.log |  8 ---
 tests/commandtest.c          | 58 ---------------------
 5 files changed, 168 deletions(-)
 delete mode 100644 tests/commanddata/test24.log

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ee1073e680..c560dda5e8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1699,7 +1699,6 @@ virCommandNewVAList;
 virCommandNonblockingFDs;
 virCommandPassFD;
 virCommandPassFDGetFDIndex;
-virCommandPassListenFDs;
 virCommandRawStatus;
 virCommandRequireHandshake;
 virCommandRun;
diff --git a/src/util/vircommand.c b/src/util/vircommand.c
index 8695c98d1b..c81ddfc0d0 100644
--- a/src/util/vircommand.c
+++ b/src/util/vircommand.c
@@ -66,7 +66,6 @@ enum {
     VIR_EXEC_CLEAR_CAPS = (1 << 2),
     VIR_EXEC_RUN_SYNC   = (1 << 3),
     VIR_EXEC_ASYNC_IO   = (1 << 4),
-    VIR_EXEC_LISTEN_FDS = (1 << 5),
 };
 
 typedef struct _virCommandFD virCommandFD;
@@ -205,78 +204,6 @@ virCommandFDSet(virCommandPtr cmd,
 
 #ifndef WIN32
 
-static void
-virCommandReorderFDs(virCommandPtr cmd)
-{
-    int maxfd = 0;
-    int openmax = 0;
-    size_t i = 0;
-
-    if (!cmd || cmd->has_error || !cmd->npassfd)
-        return;
-
-    for (i = 0; i < cmd->npassfd; i++)
-        maxfd = MAX(cmd->passfd[i].fd, maxfd);
-
-    openmax = sysconf(_SC_OPEN_MAX);
-    if (openmax < 0 ||
-        maxfd + cmd->npassfd > openmax)
-        goto error;
-
-    /*
-     * Simple two-pass sort, nothing fancy.  This is not designed for
-     * anything else than passing around 2 FDs into the child.
-     *
-     * So first dup2() them somewhere else.
-     */
-    for (i = 0; i < cmd->npassfd; i++) {
-        int newfd = maxfd + i + 1;
-        int oldfd = cmd->passfd[i].fd;
-        if (dup2(oldfd, newfd) != newfd) {
-            virReportSystemError(errno,
-                                 _("Cannot dup2() fd %d before "
-                                   "passing it to the child"),
-                                 oldfd);
-            goto error;
-        }
-        VIR_FORCE_CLOSE(cmd->passfd[i].fd);
-    }
-
-    VIR_DEBUG("First reorder pass done");
-
-    /*
-     * And then dup2() them in orderly manner.
-     */
-    for (i = 0; i < cmd->npassfd; i++) {
-        int newfd = STDERR_FILENO + i + 1;
-        int oldfd = maxfd + i + 1;
-        if (dup2(oldfd, newfd) != newfd) {
-            virReportSystemError(errno,
-                                 _("Cannot dup2() fd %d before "
-                                   "passing it to the child"),
-                                 oldfd);
-            goto error;
-        }
-        if (virSetInherit(newfd, true) < 0) {
-            virReportSystemError(errno,
-                                 _("Cannot set O_CLOEXEC on fd %d before "
-                                   "passing it to the child"),
-                                 newfd);
-            goto error;
-        }
-        VIR_FORCE_CLOSE(oldfd);
-        cmd->passfd[i].fd = newfd;
-    }
-
-    VIR_DEBUG("Second reorder pass done");
-
-    return;
-
- error:
-    cmd->has_error = -1;
-    return;
-}
-
 /**
  * virFork:
  *
@@ -763,15 +690,6 @@ virExec(virCommandPtr cmd)
         goto fork_error;
     }
 
-    if (cmd->flags & VIR_EXEC_LISTEN_FDS) {
-        virCommandReorderFDs(cmd);
-        virCommandAddEnvFormat(cmd, "LISTEN_PID=%u", getpid());
-        virCommandAddEnvFormat(cmd, "LISTEN_FDS=%zu", cmd->npassfd);
-
-        if (cmd->has_error)
-            goto fork_error;
-    }
-
     /* Close logging again to ensure no FDs leak to child */
     virLogReset();
 
@@ -1002,23 +920,6 @@ virCommandPassFD(virCommandPtr cmd, int fd, unsigned int flags)
     }
 }
 
-/**
- * virCommandPassListenFDs:
- * @cmd: the command to modify
- *
- * Pass LISTEN_FDS and LISTEN_PID environment variables into the
- * child.  LISTEN_PID has the value of the child's PID and LISTEN_FDS
- * is a number of passed file descriptors starting from 3.
- */
-void
-virCommandPassListenFDs(virCommandPtr cmd)
-{
-    if (!cmd || cmd->has_error)
-        return;
-
-    cmd->flags |= VIR_EXEC_LISTEN_FDS;
-}
-
 /*
  * virCommandPassFDGetFDIndex:
  * @cmd: pointer to virCommand
diff --git a/src/util/vircommand.h b/src/util/vircommand.h
index c9a8d3c41c..2a9ee5cdc7 100644
--- a/src/util/vircommand.h
+++ b/src/util/vircommand.h
@@ -60,8 +60,6 @@ void virCommandPassFD(virCommandPtr cmd,
                       int fd,
                       unsigned int flags) ATTRIBUTE_NOINLINE;
 
-void virCommandPassListenFDs(virCommandPtr cmd);
-
 int virCommandPassFDGetFDIndex(virCommandPtr cmd,
                                int fd);
 
diff --git a/tests/commanddata/test24.log b/tests/commanddata/test24.log
deleted file mode 100644
index 38cbb5451b..0000000000
--- a/tests/commanddata/test24.log
+++ /dev/null
@@ -1,8 +0,0 @@
-FD:0
-FD:1
-FD:2
-FD:3
-FD:4
-DAEMON:yes
-CWD:/
-UMASK:0022
diff --git a/tests/commandtest.c b/tests/commandtest.c
index 146cc4c1bf..ce0832fb0c 100644
--- a/tests/commandtest.c
+++ b/tests/commandtest.c
@@ -1003,63 +1003,6 @@ test23(const void *unused ATTRIBUTE_UNUSED)
     return ret;
 }
 
-static int test24(const void *unused ATTRIBUTE_UNUSED)
-{
-    char *pidfile = virPidFileBuildPath(abs_builddir, "commandhelper");
-    char *prefix = NULL;
-    int newfd1 = dup(STDERR_FILENO);
-    int newfd2 = dup(STDERR_FILENO);
-    int newfd3 = dup(STDERR_FILENO);
-    int ret = -1;
-    pid_t pid;
-    virCommandPtr cmd = virCommandNew(abs_builddir "/commandhelper");
-
-    if (!pidfile)
-        goto cleanup;
-
-    if (VIR_CLOSE(newfd1) < 0)
-        printf("Cannot close fd %d\n", newfd1);
-
-    virCommandSetPidFile(cmd, pidfile);
-    virCommandDaemonize(cmd);
-    virCommandPassFD(cmd, newfd2, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
-    virCommandPassFD(cmd, newfd3, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
-    newfd2 = newfd3 = -1;
-    virCommandPassListenFDs(cmd);
-
-    if (virCommandRun(cmd, NULL) < 0) {
-        printf("Cannot run child %s\n", virGetLastErrorMessage());
-        goto cleanup;
-    }
-
-    if (virPidFileRead(abs_builddir, "commandhelper", &pid) < 0) {
-        printf("cannot read pidfile\n");
-        goto cleanup;
-    }
-
-    if (virAsprintf(&prefix,
-                    "ENV:LISTEN_FDS=2\nENV:LISTEN_PID=%u\n",
-                    pid) < 0)
-        goto cleanup;
-
-    while (kill(pid, 0) != -1)
-        usleep(100*1000);
-
-    ret = checkoutput("test24", prefix);
-
- cleanup:
-    if (pidfile)
-        unlink(pidfile);
-    VIR_FREE(pidfile);
-    VIR_FREE(prefix);
-    virCommandFree(cmd);
-    VIR_FORCE_CLOSE(newfd1);
-    VIR_FORCE_CLOSE(newfd2);
-    VIR_FORCE_CLOSE(newfd3);
-    return ret;
-}
-
-
 static int test25(const void *unused ATTRIBUTE_UNUSED)
 {
     int ret = -1;
@@ -1347,7 +1290,6 @@ mymain(void)
     DO_TEST(test21);
     DO_TEST(test22);
     DO_TEST(test23);
-    DO_TEST(test24);
     DO_TEST(test25);
     DO_TEST(test26);
 
-- 
2.21.0




More information about the libvir-list mailing list