[libvirt] [PATCH] [2/4] Implement remote protocol for managed save

Daniel Veillard veillard at redhat.com
Fri Apr 2 20:56:47 UTC 2010


On Fri, Apr 02, 2010 at 02:12:12PM -0600, Eric Blake wrote:
> On 04/02/2010 01:54 PM, Daniel Veillard wrote:
> > +static int
> > +remoteDispatchDomainHasManagedSaveImage (struct qemud_server *server ATTRIBUTE_UNUSED,
> > +                                         struct qemud_client *client ATTRIBUTE_UNUSED,
> > +                                         virConnectPtr conn,
> > +                                         remote_message_header *hdr ATTRIBUTE_UNUSED,
> > +                                         remote_error *rerr,
> > +                                         remote_domain_has_managed_save_image_args *args,
> > +                                         void *ret ATTRIBUTE_UNUSED)
> > +{
> > +    virDomainPtr dom;
> > +
> > +    dom = get_nonnull_domain (conn, args->dom);
> > +    if (dom == NULL) {
> > +        remoteDispatchConnError(rerr, conn);
> > +        return -1;
> > +    }
> > +
> > +    if (virDomainHasManagedSaveImage (dom, args->flags) == -1) {
> > +        virDomainFree(dom);
> > +        remoteDispatchConnError(rerr, conn);
> > +        return -1;
> > +    }
> > +    virDomainFree(dom);
> > +    return 0;
> > +}
> 
> Shouldn't this be able to return 1 in the case where
> virDomainHasManagedSaveImage returns 1?

  yes it's a bug, we need a real return value structure

> > +static int
> > +remoteDomainHasManagedSaveImage (virDomainPtr domain, unsigned int flags)
> > +{
> > +    int rv = -1;
> > +    remote_domain_has_managed_save_image_args args;
> > +    struct private_data *priv = domain->conn->privateData;
> > +
> > +    remoteDriverLock(priv);
> > +
> > +    make_nonnull_domain (&args.dom, domain);
> > +    args.flags = flags;
> > +
> > +    if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_HAS_MANAGED_SAVE_IMAGE,
> > +              (xdrproc_t) xdr_remote_domain_has_managed_save_image_args, (char *) &args,
> > +              (xdrproc_t) xdr_void, (char *) NULL) == -1)
> > +        goto done;
> > +
> > +    rv = 0;
> > +
> > +done:
> > +    remoteDriverUnlock(priv);
> > +    return rv;
> > +}
> 
> Likewise.

  Yup, I end up with the following change on top of the previous patch,

   thanks a lot !

Daniel


-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
-------------- next part --------------
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index f86c7f1..0374f9a 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -1657,6 +1657,10 @@ struct remote_domain_has_managed_save_image_args {
     unsigned flags;
 };
 
+struct remote_domain_has_managed_save_image_ret {
+    int ret;
+};
+
 struct remote_domain_managed_save_remove_args {
     remote_nonnull_domain dom;
     unsigned flags;
diff --git a/daemon/remote.c b/daemon/remote.c
index b708027..780d536 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -2448,7 +2448,7 @@ remoteDispatchDomainHasManagedSaveImage (struct qemud_server *server ATTRIBUTE_U
                                          remote_message_header *hdr ATTRIBUTE_UNUSED,
                                          remote_error *rerr,
                                          remote_domain_has_managed_save_image_args *args,
-                                         void *ret ATTRIBUTE_UNUSED)
+                                         remote_domain_has_managed_save_image_ret *ret)
 {
     virDomainPtr dom;
 
@@ -2458,7 +2458,8 @@ remoteDispatchDomainHasManagedSaveImage (struct qemud_server *server ATTRIBUTE_U
         return -1;
     }
 
-    if (virDomainHasManagedSaveImage (dom, args->flags) == -1) {
+    ret->ret = virDomainHasManagedSaveImage (dom, args->flags);
+    if (ret->ret == -1) {
         virDomainFree(dom);
         remoteDispatchConnError(rerr, conn);
         return -1;
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 47e9c7d..ede00e8 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -3645,6 +3645,7 @@ remoteDomainHasManagedSaveImage (virDomainPtr domain, unsigned int flags)
 {
     int rv = -1;
     remote_domain_has_managed_save_image_args args;
+    remote_domain_has_managed_save_image_ret ret;
     struct private_data *priv = domain->conn->privateData;
 
     remoteDriverLock(priv);
@@ -3654,10 +3655,10 @@ remoteDomainHasManagedSaveImage (virDomainPtr domain, unsigned int flags)
 
     if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_HAS_MANAGED_SAVE_IMAGE,
               (xdrproc_t) xdr_remote_domain_has_managed_save_image_args, (char *) &args,
-              (xdrproc_t) xdr_void, (char *) NULL) == -1)
+              (xdrproc_t) xdr_remote_domain_has_managed_save_image_ret, (char *) &ret) == -1)
         goto done;
 
-    rv = 0;
+    rv = ret.ret;
 
 done:
     remoteDriverUnlock(priv);
diff --git a/daemon/remote_dispatch_prototypes.h b/daemon/remote_dispatch_prototypes.h
index 3671a26..c33c144 100644
--- a/daemon/remote_dispatch_prototypes.h
+++ b/daemon/remote_dispatch_prototypes.h
@@ -289,7 +289,7 @@ static int remoteDispatchDomainHasManagedSaveImage(
     remote_message_header *hdr,
     remote_error *err,
     remote_domain_has_managed_save_image_args *args,
-    void *ret);
+    remote_domain_has_managed_save_image_ret *ret);
 static int remoteDispatchDomainInterfaceStats(
     struct qemud_server *server,
     struct qemud_client *client,
diff --git a/daemon/remote_dispatch_ret.h b/daemon/remote_dispatch_ret.h
index b134f25..84f401b 100644
--- a/daemon/remote_dispatch_ret.h
+++ b/daemon/remote_dispatch_ret.h
@@ -125,3 +125,4 @@
     remote_num_of_nwfilters_ret val_remote_num_of_nwfilters_ret;
     remote_list_nwfilters_ret val_remote_list_nwfilters_ret;
     remote_nwfilter_define_xml_ret val_remote_nwfilter_define_xml_ret;
+    remote_domain_has_managed_save_image_ret val_remote_domain_has_managed_save_image_ret;
diff --git a/daemon/remote_dispatch_table.h b/daemon/remote_dispatch_table.h
index ac54f00..bda7af2 100644
--- a/daemon/remote_dispatch_table.h
+++ b/daemon/remote_dispatch_table.h
@@ -920,7 +920,7 @@
 {   /* DomainHasManagedSaveImage => 183 */
     .fn = (dispatch_fn) remoteDispatchDomainHasManagedSaveImage,
     .args_filter = (xdrproc_t) xdr_remote_domain_has_managed_save_image_args,
-    .ret_filter = (xdrproc_t) xdr_void,
+    .ret_filter = (xdrproc_t) xdr_remote_domain_has_managed_save_image_ret,
 },
 {   /* DomainManagedSaveRemove => 184 */
     .fn = (dispatch_fn) remoteDispatchDomainManagedSaveRemove,
diff --git a/src/remote/remote_protocol.c b/src/remote/remote_protocol.c
index 47a98e0..68b827a 100644
--- a/src/remote/remote_protocol.c
+++ b/src/remote/remote_protocol.c
@@ -3311,6 +3311,15 @@ xdr_remote_domain_has_managed_save_image_args (XDR *xdrs, remote_domain_has_mana
 }
 
 bool_t
+xdr_remote_domain_has_managed_save_image_ret (XDR *xdrs, remote_domain_has_managed_save_image_ret *objp)
+{
+
+         if (!xdr_int (xdrs, &objp->ret))
+                 return FALSE;
+        return TRUE;
+}
+
+bool_t
 xdr_remote_domain_managed_save_remove_args (XDR *xdrs, remote_domain_managed_save_remove_args *objp)
 {
 
diff --git a/src/remote/remote_protocol.h b/src/remote/remote_protocol.h
index 45dc652..6558948 100644
--- a/src/remote/remote_protocol.h
+++ b/src/remote/remote_protocol.h
@@ -1873,6 +1873,11 @@ struct remote_domain_has_managed_save_image_args {
 };
 typedef struct remote_domain_has_managed_save_image_args remote_domain_has_managed_save_image_args;
 
+struct remote_domain_has_managed_save_image_ret {
+        int ret;
+};
+typedef struct remote_domain_has_managed_save_image_ret remote_domain_has_managed_save_image_ret;
+
 struct remote_domain_managed_save_remove_args {
         remote_nonnull_domain dom;
         u_int flags;
@@ -2403,6 +2408,7 @@ extern  bool_t xdr_remote_domain_event_graphics_identity (XDR *, remote_domain_e
 extern  bool_t xdr_remote_domain_event_graphics_msg (XDR *, remote_domain_event_graphics_msg*);
 extern  bool_t xdr_remote_domain_managed_save_args (XDR *, remote_domain_managed_save_args*);
 extern  bool_t xdr_remote_domain_has_managed_save_image_args (XDR *, remote_domain_has_managed_save_image_args*);
+extern  bool_t xdr_remote_domain_has_managed_save_image_ret (XDR *, remote_domain_has_managed_save_image_ret*);
 extern  bool_t xdr_remote_domain_managed_save_remove_args (XDR *, remote_domain_managed_save_remove_args*);
 extern  bool_t xdr_remote_procedure (XDR *, remote_procedure*);
 extern  bool_t xdr_remote_message_type (XDR *, remote_message_type*);
@@ -2715,6 +2721,7 @@ extern bool_t xdr_remote_domain_event_graphics_identity ();
 extern bool_t xdr_remote_domain_event_graphics_msg ();
 extern bool_t xdr_remote_domain_managed_save_args ();
 extern bool_t xdr_remote_domain_has_managed_save_image_args ();
+extern bool_t xdr_remote_domain_has_managed_save_image_ret ();
 extern bool_t xdr_remote_domain_managed_save_remove_args ();
 extern bool_t xdr_remote_procedure ();
 extern bool_t xdr_remote_message_type ();


More information about the libvir-list mailing list