]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix remote dispatcher for screenshot command
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 16 May 2011 17:12:17 +0000 (18:12 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 16 May 2011 17:27:15 +0000 (18:27 +0100)
* daemon/remote.c: Update screenshot dispatcher to follow
  standard practice

daemon/remote.c

index 181f149ddf800ec8244e1d7e06bb1ee8209f1156..bb01c898237d97c693136fefe82374eb98ab1479 100644 (file)
@@ -1694,59 +1694,64 @@ no_memory:
 }
 
 static int
-remoteDispatchDomainScreenshot (struct qemud_server *server ATTRIBUTE_UNUSED,
-                                struct qemud_client *client,
-                                virConnectPtr conn,
-                                remote_message_header *hdr,
-                                remote_error *rerr,
-                                remote_domain_screenshot_args *args,
-                                remote_domain_screenshot_ret *ret)
+remoteDispatchDomainScreenshot(struct qemud_server *server ATTRIBUTE_UNUSED,
+                               struct qemud_client *client,
+                               virConnectPtr conn,
+                               remote_message_header *hdr,
+                               remote_error *rerr,
+                               remote_domain_screenshot_args *args,
+                               remote_domain_screenshot_ret *ret)
 {
     int rv = -1;
     struct qemud_client_stream *stream = NULL;
-    virDomainPtr dom;
+    virDomainPtr dom = NULL;
     char *mime, **mime_p;
 
+    if (!conn) {
+        virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+        goto cleanup;
+    }
+
     ret->mime = NULL;
 
-    dom = get_nonnull_domain (conn, args->dom);
-    if (dom == NULL)
-        goto err;
+    if (!(dom = get_nonnull_domain (conn, args->dom)))
+        goto cleanup;
 
-    stream = remoteCreateClientStream(conn, hdr);
-    if (!stream)
-        goto err;
+    if (!(stream = remoteCreateClientStream(conn, hdr)))
+        goto cleanup;
 
-    mime = virDomainScreenshot(dom, stream->st, args->screen, args->flags);
-    if (!mime)
-        goto err;
+    if (!(mime = virDomainScreenshot(dom, stream->st, args->screen, args->flags)))
+        goto cleanup;
 
     if (remoteAddClientStream(client, stream, 1) < 0) {
         virStreamAbort(stream->st);
-        goto err;
+        goto cleanup;
     }
 
     if (VIR_ALLOC(mime_p) < 0) {
-        remoteDispatchOOMError(rerr);
+        virReportOOMError();
         goto cleanup;
     }
 
     *mime_p = strdup(mime);
     if (*mime_p == NULL) {
-        remoteDispatchOOMError(rerr);
+        virReportOOMError();
         goto cleanup;
     }
 
     ret->mime = mime_p;
+
     rv = 0;
 
-err:
+cleanup:
     if (rv < 0)
         remoteDispatchError(rerr);
-cleanup:
-    virDomainFree(dom);
-    if (stream && rv != 0)
+    if (dom)
+        virDomainFree(dom);
+    if (stream && rv != 0) {
+        virStreamAbort(stream->st);
         remoteFreeClientStream(client, stream);
+    }
     return rv;
 }