[libvirt] [PATCH 3/5] Fix error reporting in stream creation code

Matthias Bolte matthias.bolte at googlemail.com
Sun May 15 06:23:32 UTC 2011


virStreamNew needs to dispatch the error that virGetStream reports
on failure.

remoteCreateClientStream can fail due to virStreamNew or due to
VIR_ALLOC. Report OOM error for VIR_ALLOC failure to report errors
in all error cases.

Remove OOM error reporting from remoteCreateClientStream callers.
---
 daemon/remote.c |    8 ++------
 daemon/stream.c |    7 ++++++-
 src/libvirt.c   |    2 ++
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/daemon/remote.c b/daemon/remote.c
index 6e13958..e3bd4a2 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -1190,10 +1190,8 @@ remoteDispatchDomainMigratePrepareTunnel(struct qemud_server *server ATTRIBUTE_U
 
     dname = args->dname == NULL ? NULL : *args->dname;
 
-    if (!(stream = remoteCreateClientStream(conn, hdr))) {
-        virReportOOMError();
+    if (!(stream = remoteCreateClientStream(conn, hdr)))
         goto cleanup;
-    }
 
     if (virDomainMigratePrepareTunnel(conn, stream->st,
                                       args->flags, dname, args->resource,
@@ -3014,10 +3012,8 @@ remoteDispatchDomainOpenConsole(struct qemud_server *server ATTRIBUTE_UNUSED,
     if (!(dom = get_nonnull_domain(conn, args->dom)))
         goto cleanup;
 
-    if (!(stream = remoteCreateClientStream(conn, hdr))) {
-        virReportOOMError();
+    if (!(stream = remoteCreateClientStream(conn, hdr)))
         goto cleanup;
-    }
 
     if (virDomainOpenConsole(dom,
                              args->devname ? *args->devname : NULL,
diff --git a/daemon/stream.c b/daemon/stream.c
index cada0a1..48085da 100644
--- a/daemon/stream.c
+++ b/daemon/stream.c
@@ -27,6 +27,9 @@
 #include "memory.h"
 #include "dispatch.h"
 #include "logging.h"
+#include "virterror_internal.h"
+
+#define VIR_FROM_THIS VIR_FROM_STREAMS
 
 static int
 remoteStreamHandleWrite(struct qemud_client *client,
@@ -209,8 +212,10 @@ remoteCreateClientStream(virConnectPtr conn,
 
     VIR_DEBUG("proc=%d serial=%d", hdr->proc, hdr->serial);
 
-    if (VIR_ALLOC(stream) < 0)
+    if (VIR_ALLOC(stream) < 0) {
+        virReportOOMError();
         return NULL;
+    }
 
     stream->procedure = hdr->proc;
     stream->serial = hdr->serial;
diff --git a/src/libvirt.c b/src/libvirt.c
index 6325188..7dec5a6 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -11050,6 +11050,8 @@ virStreamNew(virConnectPtr conn,
     st = virGetStream(conn);
     if (st)
         st->flags = flags;
+    else
+        virDispatchError(conn);
 
     return st;
 }
-- 
1.7.0.4




More information about the libvir-list mailing list