From b3e4401dc6203b16f4fb2c123a6f033f1747f448 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Fri, 16 Jan 2015 11:26:39 +0000 Subject: [PATCH] systemd: don't report an error if the guest is already terminated In many cases where we invoke virSystemdTerminateMachine the process(es) will have already gone away on their own accord. In these cases we log an error message that the machine does not exist. We should catch this particular error and simply ignore it, so we don't pollute the logs. --- src/util/virsystemd.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c index 3ac399a1b4..8cedf8db75 100644 --- a/src/util/virsystemd.c +++ b/src/util/virsystemd.c @@ -338,18 +338,22 @@ int virSystemdTerminateMachine(const char *name, int ret; DBusConnection *conn; char *machinename = NULL; + virError error; + + memset(&error, 0, sizeof(error)); ret = virDBusIsServiceEnabled("org.freedesktop.machine1"); if (ret < 0) - return ret; + goto cleanup; if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) < 0) - return ret; - - if (!(conn = virDBusGetSystemBus())) - return -1; + goto cleanup; ret = -1; + + if (!(conn = virDBusGetSystemBus())) + goto cleanup; + if (!(machinename = virSystemdMakeMachineName(name, drivername, privileged))) goto cleanup; @@ -366,7 +370,7 @@ int virSystemdTerminateMachine(const char *name, VIR_DEBUG("Attempting to terminate machine via systemd"); if (virDBusCallMethod(conn, NULL, - NULL, + &error, "org.freedesktop.machine1", "/org/freedesktop/machine1", "org.freedesktop.machine1.Manager", @@ -375,9 +379,18 @@ int virSystemdTerminateMachine(const char *name, machinename) < 0) goto cleanup; + if (error.code == VIR_ERR_ERROR && + !STREQ_NULLABLE("org.freedesktop.machine1.NoSuchMachine", + error.str1)) { + virReportErrorObject(&error); + goto cleanup; + } + ret = 0; cleanup: + virResetError(&error); + VIR_FREE(machinename); return ret; }