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
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Thu, Feb 23, 2017 at 12:53:06PM +0100, Ján Tomko wrote:
> 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)
How about virSystemdHasMachined? It's not only used to create a machine so
the function name may be misleading. That would also require to change the
names in the following patch to virSystemdHasMachinedCachedValue and
virSystemdHasMachinedResetCachedValue.
ACK series with that fixed.
Pavel
> +{
> + 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
>
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Thu, Feb 23, 2017 at 12:53 PM +0100, Ján Tomko <jtomko@redhat.com> wrote:
> 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");
> +}
> +
Would it make sense to you to generalize this function? Because at least
the same calls are needed for 'org.freedesktop.login1' (logind) in
virsystemd.c:virSystemdPMSupportTarget().
>
> 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
>
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
--
Beste Grüße / Kind regards
Marc Hartmayer
IBM Deutschland Research & Development GmbH
Vorsitzende des Aufsichtsrats: Martina Koederitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.