From: Daniel P. Berrange Date: Fri, 16 Jan 2015 11:26:39 +0000 (+0000) Subject: systemd: don't report an error if the guest is already terminated X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b3e4401dc620;p=libvirt.git 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. --- 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; + goto cleanup; + + ret = -1; if (!(conn = virDBusGetSystemBus())) - return -1; + goto cleanup; - ret = -1; 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; }