From 2f678bb10faccba30319488420c586b6a5436f94 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Tue, 18 Sep 2012 12:01:18 +0200 Subject: [PATCH] virNetDevBandwidthClear: Improve error handling Two changes are introduced in this patch: - The first change removes ATTRIBUTE_RETURN_CHECK from virNetDevBandwidthClear, because it was called with ignore_value always, anyway. The function is used even when it's not necessary to call it, just for cleanup purposes. - The second change is added ignoring of the command's exit status, since it may report an error even when run just as "to be sure we clean up" function. No libvirt errors are suppresed by this. --- src/network/bridge_driver.c | 4 ++-- src/util/virnetdevbandwidth.c | 10 ++++++---- src/util/virnetdevbandwidth.h | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 0e38016e2c..3a800c933b 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -2161,7 +2161,7 @@ networkStartNetworkVirtual(struct network_driver *driver, return 0; err5: - ignore_value(virNetDevBandwidthClear(network->def->bridge)); + virNetDevBandwidthClear(network->def->bridge); err4: if (!save_err) @@ -2206,7 +2206,7 @@ networkStartNetworkVirtual(struct network_driver *driver, static int networkShutdownNetworkVirtual(struct network_driver *driver, virNetworkObjPtr network) { - ignore_value(virNetDevBandwidthClear(network->def->bridge)); + virNetDevBandwidthClear(network->def->bridge); if (network->radvdPid > 0) { char *radvdpidbase; diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c index b23ccd3372..8faeae640d 100644 --- a/src/util/virnetdevbandwidth.c +++ b/src/util/virnetdevbandwidth.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011 Red Hat, Inc. + * Copyright (C) 2009-2012 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -69,7 +69,7 @@ virNetDevBandwidthSet(const char *ifname, goto cleanup; } - ignore_value(virNetDevBandwidthClear(ifname)); + virNetDevBandwidthClear(ifname); if (bandwidth->in) { if (virAsprintf(&average, "%llukbps", bandwidth->in->average) < 0) @@ -166,12 +166,13 @@ int virNetDevBandwidthClear(const char *ifname) { int ret = 0; + int dummy; /* for ignoring the exit status */ virCommandPtr cmd = NULL; cmd = virCommandNew(TC); virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "root", NULL); - if (virCommandRun(cmd, NULL) < 0) + if (virCommandRun(cmd, &dummy) < 0) ret = -1; virCommandFree(cmd); @@ -179,8 +180,9 @@ virNetDevBandwidthClear(const char *ifname) cmd = virCommandNew(TC); virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "ingress", NULL); - if (virCommandRun(cmd, NULL) < 0) + if (virCommandRun(cmd, &dummy) < 0) ret = -1; + virCommandFree(cmd); return ret; diff --git a/src/util/virnetdevbandwidth.h b/src/util/virnetdevbandwidth.h index 18384ae620..3fc903cfe8 100644 --- a/src/util/virnetdevbandwidth.h +++ b/src/util/virnetdevbandwidth.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011 Red Hat, Inc. + * Copyright (C) 2009-2012 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -44,7 +44,7 @@ void virNetDevBandwidthFree(virNetDevBandwidthPtr def); int virNetDevBandwidthSet(const char *ifname, virNetDevBandwidthPtr bandwidth) ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; int virNetDevBandwidthClear(const char *ifname) - ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; + ATTRIBUTE_NONNULL(1); int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest, const virNetDevBandwidthPtr src) ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; -- GitLab