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
This commit is contained in:
Martin Kletzander 2013-08-21 11:02:42 +02:00
parent 23263af678
commit a0b6a36f94

View File

@ -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);
}