[libvirt] [PATCH 1/7] remote generator: Handle virDomainCreateWithFlags

Daniel P. Berrange berrange at redhat.com
Wed May 25 16:08:57 UTC 2011


On Mon, May 23, 2011 at 07:36:04PM +0200, Matthias Bolte wrote:
> Add special case code for updating a given domain object instead of
> returning a new one.
> ---
>  daemon/remote.c              |   30 -----------------------
>  daemon/remote_generator.pl   |   55 +++++++++++++++++++++++++++++------------
>  src/remote/remote_driver.c   |   32 ------------------------
>  src/remote/remote_protocol.x |    2 +-
>  4 files changed, 40 insertions(+), 79 deletions(-)
> 
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 80783b3..fcda2c5 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -895,36 +895,6 @@ cleanup:
>  }
>  
>  static int
> -remoteDispatchDomainCreateWithFlags(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_create_with_flags_args *args,
> -                                    remote_domain_create_with_flags_ret *ret)
> -{
> -    int rv = -1;
> -    virDomainPtr dom = NULL;
> -
> -    if (!(dom = get_nonnull_domain(conn, args->dom)))
> -        goto cleanup;
> -
> -    if (virDomainCreateWithFlags(dom, args->flags) < 0)
> -        goto cleanup;
> -
> -    make_nonnull_domain(&ret->dom, dom);
> -
> -    rv = 0;
> -
> -cleanup:
> -    if (rv < 0)
> -        remoteDispatchError(rerr);
> -    if (dom)
> -        virDomainFree(dom);
> -    return rv;
> -}
> -
> -static int
>  remoteDispatchDomainGetSecurityLabel(struct qemud_server *server ATTRIBUTE_UNUSED,
>                                       struct qemud_client *client ATTRIBUTE_UNUSED,
>                                       virConnectPtr conn,
> diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl
> index d21f959..b23e3b1 100755
> --- a/daemon/remote_generator.pl
> +++ b/daemon/remote_generator.pl
> @@ -450,14 +450,22 @@ elsif ($opt_b) {
>                  } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|node_device|secret|nwfilter|domain_snapshot) (\S+);/) {
>                      my $type_name = name_to_ProcName($1);
>  
> -                    push(@vars_list, "vir${type_name}Ptr $2 = NULL");
> -                    push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
> -                    push(@free_list,
> -                         "    if ($2)\n" .
> -                         "        vir${type_name}Free($2);");
> -                    $single_ret_var = $2;
> -                    $single_ret_by_ref = 0;
> -                    $single_ret_check = " == NULL";
> +                    if ($call->{ProcName} eq "DomainCreateWithFlags") {
> +                        # SPECIAL: virDomainCreateWithFlags updates the given
> +                        #          domain object instead of returning a new one
> +                        push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
> +                        $single_ret_var = undef;
> +                        $single_ret_by_ref = 1;
> +                    } else {
> +                        push(@vars_list, "vir${type_name}Ptr $2 = NULL");
> +                        push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
> +                        push(@free_list,
> +                             "    if ($2)\n" .
> +                             "        vir${type_name}Free($2);");
> +                        $single_ret_var = $2;
> +                        $single_ret_by_ref = 0;
> +                        $single_ret_check = " == NULL";
> +                    }
>                  } elsif ($ret_member =~ m/^int (\S+)<(\S+)>;/) {
>                      push(@vars_list, "int len");
>                      push(@ret_list, "ret->$1.$1_len = len;");
> @@ -679,7 +687,12 @@ elsif ($opt_b) {
>              if ($single_ret_by_ref) {
>                  print "    if (vir$prefix$proc_name(";
>                  print join(', ', @args_list);
> -                print ", &$single_ret_var) < 0)\n";
> +
> +                if (defined $single_ret_var) {
> +                    print ", &$single_ret_var";
> +                }
> +
> +                print ") < 0)\n";
>              } else {
>                  print "    if (($single_ret_var = vir$prefix$proc_name(";
>                  print join(', ', @args_list);
> @@ -979,15 +992,25 @@ elsif ($opt_k) {
>                          $priv_name = "${name}PrivateData";
>                      }
>  
> -                    if ($name eq "domain_snapshot") {
> -                        push(@ret_list, "rv = get_nonnull_$name(dom, ret.$arg_name);");
> +                    if ($call->{ProcName} eq "DomainCreateWithFlags") {
> +                        # SPECIAL: virDomainCreateWithFlags updates the given
> +                        #          domain object instead of returning a new one
> +                        push(@ret_list, "dom->id = ret.dom.id;");
> +                        push(@ret_list, "xdr_free((xdrproc_t)xdr_$call->{ret}, (char *)&ret);");
> +                        push(@ret_list, "rv = 0;");
> +                        $single_ret_var = "int rv = -1";
> +                        $single_ret_type = "int";
>                      } else {
> -                        push(@ret_list, "rv = get_nonnull_$name($priv_src, ret.$arg_name);");
> -                    }
> +                        if ($name eq "domain_snapshot") {
> +                            push(@ret_list, "rv = get_nonnull_$name(dom, ret.$arg_name);");
> +                        } else {
> +                            push(@ret_list, "rv = get_nonnull_$name($priv_src, ret.$arg_name);");
> +                        }
>  
> -                    push(@ret_list, "xdr_free((xdrproc_t)xdr_$call->{ret}, (char *)&ret);");
> -                    $single_ret_var = "vir${type_name}Ptr rv = NULL";
> -                    $single_ret_type = "vir${type_name}Ptr";
> +                        push(@ret_list, "xdr_free((xdrproc_t)xdr_$call->{ret}, (char *)&ret);");
> +                        $single_ret_var = "vir${type_name}Ptr rv = NULL";
> +                        $single_ret_type = "vir${type_name}Ptr";
> +                    }
>                  } elsif ($ret_member =~ m/^int (\S+);/) {
>                      my $arg_name = $1;
>  
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index 8c69743..69b888d 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -2441,38 +2441,6 @@ done:
>      return rv;
>  }
>  
> -static int
> -remoteDomainCreateWithFlags (virDomainPtr domain, unsigned int flags)
> -{
> -    int rv = -1;
> -    remote_domain_create_with_flags_args args;
> -    remote_domain_create_with_flags_ret ret;
> -    struct private_data *priv = domain->conn->privateData;
> -
> -    remoteDriverLock(priv);
> -
> -    make_nonnull_domain (&args.dom, domain);
> -    args.flags = flags;
> -
> -    memset (&ret, 0, sizeof ret);
> -    if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS,
> -              (xdrproc_t) xdr_remote_domain_create_with_flags_args,
> -              (char *) &args,
> -              (xdrproc_t) xdr_remote_domain_create_with_flags_ret,
> -              (char *) &ret) == -1)
> -        goto done;
> -
> -    domain->id = ret.dom.id;
> -    xdr_free ((xdrproc_t) &xdr_remote_domain_create_with_flags_ret,
> -              (char *) &ret);
> -
> -    rv = 0;
> -
> -done:
> -    remoteDriverUnlock(priv);
> -    return rv;
> -}
> -
>  static char *
>  remoteDomainGetSchedulerType (virDomainPtr domain, int *nparams)
>  {
> diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
> index f0da95d..9df86da 100644
> --- a/src/remote/remote_protocol.x
> +++ b/src/remote/remote_protocol.x
> @@ -2266,7 +2266,7 @@ enum remote_procedure {
>      REMOTE_PROC_DOMAIN_SNAPSHOT_DELETE = 193, /* autogen autogen */
>      REMOTE_PROC_DOMAIN_GET_BLOCK_INFO = 194, /* autogen autogen */
>      REMOTE_PROC_DOMAIN_EVENT_IO_ERROR_REASON = 195, /* autogen autogen */
> -    REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS = 196, /* skipgen skipgen */
> +    REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS = 196, /* autogen autogen */
>      REMOTE_PROC_DOMAIN_SET_MEMORY_PARAMETERS = 197, /* skipgen skipgen */
>      REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS = 198, /* skipgen skipgen */
>      REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199, /* autogen autogen */

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list