[libvirt] [PATCH 06/24] maint: reset error on entrance to public API

Eric Blake eblake at redhat.com
Sat Dec 28 16:11:41 UTC 2013


We document that calling any public API wipes out all prior
libvirt errors in the same thread; but weren't obeying this
style in a few functions.

* src/libvirt.c (virGetVersion, virConnectRef, virDomainRef)
(virDomainGetSecurityLabel, virDomainGetSecurityLabelList)
(virDomainSetMetadata, virDomainGetMetadata)
(virNodeGetSecurityModel, virNetworkRef, virInterfaceRef)
(virStoragePoolRef, virStorageVolRef, virNodeDeviceGetName)
(virNodeDeviceRef, virSecretRef, virStreamRef, virNWFilterRef)
(virDomainSnapshotRef): Reset error on entrance.
(do_open): Drop redundant error reset.
* src/libvirt-qemu.c (virDomainQemuAgentCommand): Likewise.
* src/libvirt-lxc.c (virDomainLxcEnterNamespace)
(virDomainLxcEnterSecurityLabel): Likewise.

Signed-off-by: Eric Blake <eblake at redhat.com>
---
 src/libvirt-lxc.c  |  4 ++++
 src/libvirt-qemu.c |  4 ++++
 src/libvirt.c      | 37 +++++++++++++++++++++++++++++++++++--
 3 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c
index 7ffed3e..e7b4198 100644
--- a/src/libvirt-lxc.c
+++ b/src/libvirt-lxc.c
@@ -142,6 +142,8 @@ virDomainLxcEnterNamespace(virDomainPtr domain,
                      "noldfdlist=%p, oldfdlist=%p, flags=%x",
                      nfdlist, fdlist, noldfdlist, oldfdlist, flags);

+    virResetLastError();
+
     virCheckFlagsGoto(0, error);

     if (noldfdlist && oldfdlist) {
@@ -203,6 +205,8 @@ virDomainLxcEnterSecurityLabel(virSecurityModelPtr model,
     VIR_DEBUG("model=%p, label=%p, oldlabel=%p, flags=%x",
               model, label, oldlabel, flags);

+    virResetLastError();
+
     virCheckFlagsGoto(0, error);

     virCheckNonNullArgGoto(model, error);
diff --git a/src/libvirt-qemu.c b/src/libvirt-qemu.c
index 2fa5522..71148f7 100644
--- a/src/libvirt-qemu.c
+++ b/src/libvirt-qemu.c
@@ -112,6 +112,7 @@ error:
     return -1;
 }

+
 /**
  * virDomainQemuAttach:
  * @conn: pointer to a hypervisor connection
@@ -186,6 +187,7 @@ error:
     return NULL;
 }

+
 /**
  * virDomainQemuAgentCommand:
  * @domain: a domain object
@@ -217,6 +219,8 @@ virDomainQemuAgentCommand(virDomainPtr domain,
     VIR_DOMAIN_DEBUG(domain, "cmd=%s, timeout=%d, flags=%x",
                      cmd, timeout, flags);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         virDispatchError(NULL);
diff --git a/src/libvirt.c b/src/libvirt.c
index 7fd6072..cd1112a 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -918,6 +918,7 @@ virGetVersion(unsigned long *libVer, const char *type ATTRIBUTE_UNUSED,
     if (virInitialize() < 0)
         goto error;

+    virResetLastError();
     if (libVer == NULL)
         goto error;
     *libVer = LIBVIR_VERSION_NUMBER;
@@ -1098,8 +1099,6 @@ do_open(const char *name,
     virConnectPtr ret;
     virConfPtr conf = NULL;

-    virResetLastError();
-
     ret = virGetConnect();
     if (ret == NULL)
         return NULL;
@@ -1535,6 +1534,8 @@ virConnectRef(virConnectPtr conn)
 {
     VIR_DEBUG("conn=%p refs=%d", conn, conn ? conn->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECT(conn))) {
         virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
         virDispatchError(NULL);
@@ -2463,6 +2464,8 @@ virDomainRef(virDomainPtr domain)
 {
     VIR_DOMAIN_DEBUG(domain, "refs=%d", domain ? domain->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_DOMAIN(domain))) {
         virLibConnError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         virDispatchError(NULL);
@@ -10712,6 +10715,8 @@ virDomainGetSecurityLabel(virDomainPtr domain, virSecurityLabelPtr seclabel)

     VIR_DOMAIN_DEBUG(domain, "seclabel=%p", seclabel);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         virDispatchError(NULL);
@@ -10758,6 +10763,8 @@ virDomainGetSecurityLabelList(virDomainPtr domain,

     VIR_DOMAIN_DEBUG(domain, "seclabels=%p", seclabels);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         virDispatchError(NULL);
@@ -10827,6 +10834,8 @@ virDomainSetMetadata(virDomainPtr domain,
                      type, NULLSTR(metadata), NULLSTR(key), NULLSTR(uri),
                      flags);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         goto error;
@@ -10913,6 +10922,8 @@ virDomainGetMetadata(virDomainPtr domain,
     VIR_DOMAIN_DEBUG(domain, "type=%d, uri='%s', flags=%x",
                      type, NULLSTR(uri), flags);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
         virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
         goto error;
@@ -10972,6 +10983,8 @@ virNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel)
 {
     VIR_DEBUG("conn=%p secmodel=%p", conn, secmodel);

+    virResetLastError();
+
     if (!VIR_IS_CONNECT(conn)) {
         virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
         virDispatchError(NULL);
@@ -12085,6 +12098,8 @@ virNetworkRef(virNetworkPtr network)
     VIR_DEBUG("network=%p refs=%d", network,
               network ? network->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_NETWORK(network))) {
         virLibConnError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
         virDispatchError(NULL);
@@ -13054,6 +13069,8 @@ virInterfaceRef(virInterfacePtr iface)
 {
     VIR_DEBUG("iface=%p refs=%d", iface, iface ? iface->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_INTERFACE(iface))) {
         virLibConnError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
         virDispatchError(NULL);
@@ -14125,6 +14142,8 @@ virStoragePoolRef(virStoragePoolPtr pool)
 {
     VIR_DEBUG("pool=%p refs=%d", pool, pool ? pool->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_STORAGE_POOL(pool))) {
         virLibConnError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
         virDispatchError(NULL);
@@ -15252,6 +15271,8 @@ virStorageVolRef(virStorageVolPtr vol)
 {
     VIR_DEBUG("vol=%p refs=%d", vol, vol ? vol->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_STORAGE_VOL(vol))) {
         virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
         virDispatchError(NULL);
@@ -15784,6 +15805,8 @@ const char *virNodeDeviceGetName(virNodeDevicePtr dev)
 {
     VIR_DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
         virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
         virDispatchError(NULL);
@@ -15958,6 +15981,8 @@ virNodeDeviceRef(virNodeDevicePtr dev)
 {
     VIR_DEBUG("dev=%p refs=%d", dev, dev ? dev->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_NODE_DEVICE(dev))) {
         virLibConnError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
         virDispatchError(NULL);
@@ -17087,6 +17112,8 @@ virSecretRef(virSecretPtr secret)
     VIR_DEBUG("secret=%p refs=%d", secret,
               secret ? secret->object.u.s.refs : 0);

+    virResetLastError();
+
     if (!VIR_IS_CONNECTED_SECRET(secret)) {
         virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
         virDispatchError(NULL);
@@ -17184,6 +17211,8 @@ virStreamRef(virStreamPtr stream)
     VIR_DEBUG("stream=%p refs=%d", stream,
               stream ? stream->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_STREAM(stream))) {
         virLibConnError(VIR_ERR_INVALID_STREAM, __FUNCTION__);
         virDispatchError(NULL);
@@ -18624,6 +18653,8 @@ virNWFilterRef(virNWFilterPtr nwfilter)
     VIR_DEBUG("nwfilter=%p refs=%d", nwfilter,
               nwfilter ? nwfilter->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_CONNECTED_NWFILTER(nwfilter))) {
         virLibConnError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
         virDispatchError(NULL);
@@ -20964,6 +20995,8 @@ virDomainSnapshotRef(virDomainSnapshotPtr snapshot)
     VIR_DEBUG("snapshot=%p, refs=%d", snapshot,
               snapshot ? snapshot->object.u.s.refs : 0);

+    virResetLastError();
+
     if ((!VIR_IS_DOMAIN_SNAPSHOT(snapshot))) {
         virLibDomainSnapshotError(VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
                                   __FUNCTION__);
-- 
1.8.4.2




More information about the libvir-list mailing list