util: fix memory leak in failure path of virCgroupKillRecursiveInternal

Don't leak keypath when we fail to kill a process

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
This commit is contained in:
Chen Hanxiao 2014-05-13 16:01:16 +08:00 committed by Laine Stump
parent b279e52f7b
commit d18aa70416

View File

@ -3370,7 +3370,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group,
int rc;
bool killedAny = false;
char *keypath = NULL;
DIR *dp;
DIR *dp = NULL;
virCgroupPtr subgroup = NULL;
struct dirent *ent;
int direrr;
@ -3381,7 +3381,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group,
return -1;
if ((rc = virCgroupKillInternal(group, signum, pids)) < 0)
return -1;
goto cleanup;
if (rc == 1)
killedAny = true;
@ -3394,7 +3394,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group,
}
virReportSystemError(errno,
_("Cannot open %s"), keypath);
return -1;
goto cleanup;
}
while ((direrr = virDirRead(dp, &ent, keypath)) > 0) {
@ -3429,7 +3429,9 @@ virCgroupKillRecursiveInternal(virCgroupPtr group,
cleanup:
virCgroupFree(&subgroup);
closedir(dp);
VIR_FREE(keypath);
if (dp)
closedir(dp);
return ret;
}