Skip to content

Commit

Permalink
cgmanager: fix obvious braindeadnesses
Browse files Browse the repository at this point in the history
1. don't return bools for int-return functions
2. copy the filename to controller before using it
3. use full filename not just the key to pass to cgmanager

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
  • Loading branch information
hallyn committed Jan 16, 2014
1 parent c5afb6e commit c0e0d2b
Showing 1 changed file with 15 additions and 18 deletions.
33 changes: 15 additions & 18 deletions src/lxc/cgmanager.c
Expand Up @@ -249,59 +249,56 @@ int cgm_get(const char *filename, char *value, size_t len, const char *name, con
char *result, *controller, *key, *cgroup;

controller = alloca(strlen(filename)+1);
strcpy(controller, filename);
key = strchr(controller, '.');
if (!key)
return false;
return -1;
*key = '\0';
key++;

/* use the command interface to look for the cgroup */
cgroup = lxc_cmd_get_cgroup_path(name, lxcpath, controller);
if (!cgroup) {
ERROR("Failed to get cgroup for controller %s for %s:%s",
controller, lxcpath, name);
return false;
}
if (cgmanager_get_value_sync(NULL, cgroup_manager, controller, cgroup, key, &result) != 0) {
if (!cgroup)
return -1;
if (cgmanager_get_value_sync(NULL, cgroup_manager, controller, cgroup, filename, &result) != 0) {
ERROR("Error getting value for %s from cgmanager for cgroup %s (%s:%s)",
filename, cgroup, lxcpath, name);
free(cgroup);
return false;
return -1;
}
free(cgroup);
strncpy(value, result, len);
if (strlen(result) >= len)
value[len-1] = '\0';
free(result);
return true;
return len;
}

int cgm_set(const char *filename, const char *value, const char *name, const char *lxcpath)
{
char *controller, *key, *cgroup;

controller = alloca(strlen(filename)+1);
strcpy(controller, filename);
key = strchr(controller, '.');
if (!key)
return false;
return -1;
*key = '\0';
key++;

/* use the command interface to look for the cgroup */
cgroup = lxc_cmd_get_cgroup_path(name, lxcpath, controller);
if (!cgroup) {
ERROR("Failed to get cgroup for controller %s for %s:%s",
controller, lxcpath, name);
return false;
return -1;
}
if (cgmanager_set_value_sync(NULL, cgroup_manager, controller, cgroup, key, value) != 0) {
if (cgmanager_set_value_sync(NULL, cgroup_manager, controller, cgroup, filename, value) != 0) {
ERROR("Error setting value for %s from cgmanager for cgroup %s (%s:%s)",
filename, cgroup, lxcpath, name);
free(cgroup);
return false;
return -1;
}
free(cgroup);
return true;
return 0;
}

/*
Expand Down Expand Up @@ -365,9 +362,9 @@ static int cgm_unfreeze_fromhandler(struct lxc_handler *handler)
if (cgmanager_set_value_sync(NULL, cgroup_manager, "freezer", d->cgroup_path,
"freezer.state", "THAWED") != 0) {
ERROR("Error unfreezing %s", d->cgroup_path);
return false;
return -1;
}
return true;
return 0;
}

static struct cgroup_ops cgmanager_ops = {
Expand Down

0 comments on commit c0e0d2b

Please sign in to comment.