On 28.08.2013 08:22, Ján Tomko wrote:
On 08/28/2013 03:39 AM, Eric Blake wrote:
> On 08/27/2013 06:27 AM, Martin Kletzander wrote:
>> diff --git a/tools/virsh.c b/tools/virsh.c
>> index ac77156..34f5c4a 100644
>> --- a/tools/virsh.c
>> +++ b/tools/virsh.c
>> @@ -2321,10 +2321,9 @@ vshInitDebug(vshControl *ctl)
>> debugEnv = getenv("VIRSH_LOG_FILE");
>> if (debugEnv && *debugEnv) {
>> ctl->logfile = vshStrdup(ctl, debugEnv);
>> + vshOpenLogFile(ctl);
>> }
>> }
>> -
>> - vshOpenLogFile(ctl);
>> }
>>
>> /*
>> @@ -3044,7 +3043,9 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
>> ctl->readonly = true;
>> break;
>> case 'l':
>> + vshCloseLogFile(ctl);
>> ctl->logfile = vshStrdup(ctl, optarg);
>> + vshOpenLogFile(ctl);
>
> Note that there's another leak here (pre-existing): If I call:
> virsh -l file1 -l file2, we leak "file1" by reassigning a malloc'd
> string without first freeing the old version.
>
Actually, it gets freed in vshCloseLogFile (and set to NULL, just to be double
sure):
if (ctl->logfile) {
VIR_FREE(ctl->logfile);
ctl->logfile = NULL;
BTW this makes no sense, since VIR_FREE() sets every passed pointer to
NULL. so this assignment is just statement without any effect.
Michal