[libvirt] [PATCH] Fix URI connect precedence

Daniel P. Berrange berrange at redhat.com
Wed Aug 21 10:00:45 UTC 2013


On Wed, Aug 21, 2013 at 11:15:39AM +0200, Martin Kletzander wrote:
> Commit abfff210 changed the order of vshParseArgv() and vshInit() in
> order to make fix debugging of parameter parsing.  However, vshInit()
> did a vshReconnect() even though ctl->name wasn't set according to the
> '-c' parameter yet.  In order to keep both issues fixed, I've split
> the vshInit() into vshInitDebug() and vshInit().
> 
> One simple memleak of ctl->name is fixed as a part of this patch,
> since it is related to the issue it's fixing.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=999323
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  tools/virsh.c | 28 +++++++++++++++++-----------
>  1 file changed, 17 insertions(+), 11 deletions(-)

This looks like something we can usefully test for.

eg create a test suite that does something like this

 URI1=test:///$(top_srcdir)/examples/test/testnode.xml
 URI2=test:///$(top_srcdir)/examples/test/testnodeinline.xml

 export LIBVIRT_DEFAULT_URI=$URI1
 GOTURI=`virsh -c $URI2 uri`

 if $GOTURI == $URI2
  ....pass...
 else
   ...fail...
 fi

> 
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 15f529e..2ea44a6 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -2294,16 +2294,13 @@ vshEventLoop(void *opaque)
> 
> 
>  /*
> - * Initialize connection.
> + * Initialize debug settings.
>   */
> -static bool
> -vshInit(vshControl *ctl)
> +static void
> +vshInitDebug(vshControl *ctl)
>  {
>      char *debugEnv;
> 
> -    if (ctl->conn)
> -        return false;
> -
>      if (ctl->debug == VSH_DEBUG_DEFAULT) {
>          /* log level not set from commandline, check env variable */
>          debugEnv = getenv("VIRSH_DEBUG");
> @@ -2328,6 +2325,16 @@ vshInit(vshControl *ctl)
>      }
> 
>      vshOpenLogFile(ctl);
> +}
> +
> +/*
> + * Initialize connection.
> + */
> +static bool
> +vshInit(vshControl *ctl)
> +{
> +    if (ctl->conn)
> +        return false;
> 
>      /* set up the library error handler */
>      virSetErrorFunc(NULL, virshErrorHandler);
> @@ -3017,6 +3024,7 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
>              ctl->timing = true;
>              break;
>          case 'c':
> +            VIR_FREE(ctl->name);
>              ctl->name = vshStrdup(ctl, optarg);
>              break;
>          case 'v':
> @@ -3192,12 +3200,10 @@ main(int argc, char **argv)
>          ctl->name = vshStrdup(ctl, defaultConn);
>      }
> 
> -    if (!vshInit(ctl)) {
> -        vshDeinit(ctl);
> -        exit(EXIT_FAILURE);
> -    }
> +    vshInitDebug(ctl);
> 
> -    if (!vshParseArgv(ctl, argc, argv)) {
> +    if (!vshParseArgv(ctl, argc, argv) ||
> +        !vshInit(ctl)) {
>          vshDeinit(ctl);
>          exit(EXIT_FAILURE);
>      }

ACK

-- 
|: 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