diff options
-rw-r--r-- | src/api.c | 10 | ||||
-rw-r--r-- | src/wrapper.c | 2 |
2 files changed, 8 insertions, 4 deletions
@@ -1699,6 +1699,7 @@ unlock_error: * XX: Need to figure out how to cleanup? Cleanup just the stuff * we added, or the whole structure. */ + cgroup_free_controllers(cgroup); cgroup = NULL; return error; } @@ -1744,6 +1745,7 @@ static int cg_prepare_cgroup(struct cgroup *cgroup, pid_t pid, " failed\n", cg_mount_table[i].name); pthread_rwlock_unlock(&cg_mount_table_lock); + cgroup_free_controllers(cgroup); return ECGROUPNOTALLOWED; } } @@ -1757,6 +1759,7 @@ static int cg_prepare_cgroup(struct cgroup *cgroup, pid_t pid, if (!cptr) { cgroup_dbg("Adding controller '%s' failed\n", controller); + cgroup_free_controllers(cgroup); return ECGROUPNOTALLOWED; } } @@ -1975,11 +1978,10 @@ int cgroup_change_cgroup_path(char *dest, pid_t pid, char *controllers[]) return ret; /* Add task to cgroup */ ret = cgroup_attach_task_pid(&cgroup, pid); - if (ret) { + if (ret) cgroup_dbg("cgroup_attach_task_pid failed:%d\n", ret); - return ret; - } - return 0; + cgroup_free_controllers(&cgroup); + return ret; } /** diff --git a/src/wrapper.c b/src/wrapper.c index 2f8fcf2..1ee1665 100644 --- a/src/wrapper.c +++ b/src/wrapper.c @@ -83,8 +83,10 @@ void cgroup_free_controllers(struct cgroup *cgroup) for (i = 0; i < cgroup->index; i++) { for (j = 0; j < cgroup->controller[i]->index; j++) free(cgroup->controller[i]->values[j]); + cgroup->controller[i]->index = 0; free(cgroup->controller[i]); } + cgroup->index = 0; } void cgroup_free(struct cgroup **cgroup) |