From 355db223981592db283ff8dd4d2e198237854937 Mon Sep 17 00:00:00 2001 Message-Id: <355db223981592db283ff8dd4d2e198237854937.1377873640.git.jdenemar@redhat.com> From: Martin Kletzander Date: Thu, 22 Aug 2013 15:39:03 +0200 Subject: [PATCH] Fix URI connect precedence 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 (cherry picked from commit a0b6a36f9456dae895f50d344fd2d38be1167c58) Signed-off-by: Martin Kletzander --- tools/virsh.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) 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); } -- 1.8.3.2