]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Propagate virConnectOpen errors to global error object
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 21 Aug 2008 10:12:32 +0000 (10:12 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 21 Aug 2008 10:12:32 +0000 (10:12 +0000)
ChangeLog
src/libvirt.c

index dd7b20b20aba5a562c1bc5f5af96348ce572b221..485e5754020a6eba81bc456de5bc4c81d37134d1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Aug 21 11:09:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/libvirt.c: Propagate error from virConnect to global
+       error object for virConnectOpen() failures
+
 Wed Aug 21 10:28:09 BST 2008 Daniel P. Berrange <berrange@redhat.com>
 
        * libvirt.spec.in: Add libvirt_lxc to spec file and conditionals
index 9604b58f78e976a2a443f736dd53e6be0d3bb717..c31a6197aa8d2e8e781a6706ed26ed75387d8aec 100644 (file)
@@ -744,10 +744,8 @@ do_open (const char *name,
         name = "xen:///";
 
     ret = virGetConnect();
-    if (ret == NULL) {
-        virLibConnError(NULL, VIR_ERR_NO_MEMORY, _("allocating connection"));
+    if (ret == NULL)
         return NULL;
-    }
 
     uri = xmlParseURI (name);
     if (!uri) {
@@ -848,7 +846,21 @@ do_open (const char *name,
 failed:
     if (ret->driver) ret->driver->close (ret);
     if (uri) xmlFreeURI(uri);
-        virUnrefConnect(ret);
+
+    /* If not global error was set, copy any error set
+       in the connection object we're about to dispose of */
+    if (__lastErr.code == VIR_ERR_OK) {
+        memcpy(&__lastErr, &ret->err, sizeof(ret->err));
+        memset(&ret->err, 0, sizeof(ret->err));
+    }
+
+    /* Still no error set, then raise a generic error */
+    if (__lastErr.code == VIR_ERR_OK)
+        virLibConnError (NULL, VIR_ERR_INTERNAL_ERROR,
+                         _("unable to open connection"));
+
+    virUnrefConnect(ret);
+
     return NULL;
 }