From 403a5163c9eb817ed6264952bea67c894b44d6ca Mon Sep 17 00:00:00 2001
From: Daniel Veillard <veillard@redhat.com>
Date: Mon, 21 Jul 2008 09:48:01 +0000
Subject: [PATCH] * src/xen_unified.c: fix a leak in xenUnifiedOpen Daniel

---
 ChangeLog         |  4 ++++
 src/xen_unified.c | 11 +++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f98ff74c18..d49218b5c5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Mon Jul 21 11:47:08 CEST 2008 Daniel Veillard <veillard@redhat.com>
+
+	* src/xen_unified.c: fix a leak in xenUnifiedOpen
+
 Mon Jul 21 10:07:08 CEST 2008 Daniel Veillard <veillard@redhat.com>
 
 	* src/openvz_driver.c: patch from Evgeniy Sokolov to get OpenVZ
diff --git a/src/xen_unified.c b/src/xen_unified.c
index 73c335eaf2..5527c41fbf 100644
--- a/src/xen_unified.c
+++ b/src/xen_unified.c
@@ -239,7 +239,7 @@ xenUnifiedProbe (void)
 static int
 xenUnifiedOpen (virConnectPtr conn, xmlURIPtr uri, virConnectAuthPtr auth, int flags)
 {
-    int i;
+    int i, ret = VIR_DRV_OPEN_DECLINED;
     xenUnifiedPrivatePtr priv;
 
     /* Refuse any scheme which isn't "xen://" or "http://". */
@@ -329,19 +329,22 @@ xenUnifiedOpen (virConnectPtr conn, xmlURIPtr uri, virConnectAuthPtr auth, int f
             }
 #else
             DEBUG0("Handing off for remote driver");
-            return VIR_DRV_OPEN_DECLINED; /* Let remote_driver try instead */
+            ret = VIR_DRV_OPEN_DECLINED; /* Let remote_driver try instead */
+            goto clean;
 #endif
         }
     }
 
     return VIR_DRV_OPEN_SUCCESS;
 
- fail:
+fail:
+    ret = VIR_DRV_OPEN_ERROR;
+clean:
     DEBUG0("Failed to activate a mandatory sub-driver");
     for (i = 0 ; i < XEN_UNIFIED_NR_DRIVERS ; i++)
         if (priv->opened[i]) drivers[i]->close(conn);
     VIR_FREE(priv);
-    return VIR_DRV_OPEN_ERROR;
+    return ret
 }
 
 #define GET_PRIVATE(conn) \