[libvirt] [PATCH 1/4] Unify checking for machine1 systemd service

Ján Tomko jtomko at redhat.com
Thu Feb 23 11:53:06 UTC 2017


Both virSystemdTerminateMachine and virSystemdCreateMachine
propagate the error to tell between a non-systemd system
and a hard error.

In virSystemdGetMachineNameByPID both are treated the same,
but an error is ignored by the callers.

Split out the checks into a separate function.
---
 src/util/virsystemd.c | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
index 7ec3eee..d7a4e78 100644
--- a/src/util/virsystemd.c
+++ b/src/util/virsystemd.c
@@ -182,6 +182,20 @@ virSystemdMakeMachineName(const char *drivername,
     return machinename;
 }
 
+/* -2 = machine1 is not supported on this machine
+ * -1 = error
+ *  0 = machine1 is available
+ */
+static int
+virSystemdHasCreateMachine(void)
+{
+    int ret;
+    if ((ret = virDBusIsServiceEnabled("org.freedesktop.machine1")) < 0)
+        return ret;
+
+    return virDBusIsServiceRegistered("org.freedesktop.systemd1");
+}
+
 
 char *
 virSystemdGetMachineNameByPID(pid_t pid)
@@ -190,10 +204,7 @@ virSystemdGetMachineNameByPID(pid_t pid)
     DBusMessage *reply = NULL;
     char *name = NULL, *object = NULL;
 
-    if (virDBusIsServiceEnabled("org.freedesktop.machine1") < 0)
-        goto cleanup;
-
-    if (virDBusIsServiceRegistered("org.freedesktop.systemd1") < 0)
+    if (virSystemdHasCreateMachine() < 0)
         goto cleanup;
 
     if (!(conn = virDBusGetSystemBus()))
@@ -268,11 +279,7 @@ int virSystemdCreateMachine(const char *name,
     char *slicename = NULL;
     static int hasCreateWithNetwork = 1;
 
-    ret = virDBusIsServiceEnabled("org.freedesktop.machine1");
-    if (ret < 0)
-        return ret;
-
-    if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) < 0)
+    if ((ret = virSystemdHasCreateMachine()) < 0)
         return ret;
 
     if (!(conn = virDBusGetSystemBus()))
@@ -434,11 +441,7 @@ int virSystemdTerminateMachine(const char *name)
 
     memset(&error, 0, sizeof(error));
 
-    ret = virDBusIsServiceEnabled("org.freedesktop.machine1");
-    if (ret < 0)
-        goto cleanup;
-
-    if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) < 0)
+    if ((ret = virSystemdHasCreateMachine()) < 0)
         goto cleanup;
 
     ret = -1;
-- 
2.10.2




More information about the libvir-list mailing list