[lxc-devel] [PATCH] cgmanager: slow down there (don't always grab abs cgroup path)
Serge Hallyn
serge.hallyn at ubuntu.com
Tue May 20 16:47:17 UTC 2014
When I converted attach and enter to using move_pid_abs, these needed
to use the new get_pid_cgroup_abs method to get an absolute path. But
for some inexplicable reason I also converted the functions which get
and set cgroup properties to use the absolute paths. These are simply
not compatible with the cgmanager set_value and get_value methods.
This breaks for instance lxc-test-cgpath.
So undo that. With this patch lxc-test-cgpath, lxc-test-autotest,
and lxc-test-concurrent once again pass in a nested container.
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
src/lxc/cgmanager.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c
index 9b06d31..3a5525a 100644
--- a/src/lxc/cgmanager.c
+++ b/src/lxc/cgmanager.c
@@ -714,14 +714,13 @@ static int cgm_get(const char *filename, char *value, size_t len, const char *na
return -1;
*key = '\0';
- if (!cgm_dbus_connect()) {
- ERROR("Error connecting to cgroup manager");
+ /* use the command interface to look for the cgroup */
+ cgroup = lxc_cmd_get_cgroup_path(name, lxcpath, controller);
+ if (!cgroup)
return -1;
- }
- cgroup = try_get_abs_cgroup(name, lxcpath, controller);
- if (!cgroup) {
- cgm_dbus_disconnect();
+ if (!cgm_dbus_connect()) {
+ ERROR("Error connecting to cgroup manager");
return -1;
}
@@ -734,12 +733,12 @@ static int cgm_get(const char *filename, char *value, size_t len, const char *na
NihError *nerr;
nerr = nih_error_get();
nih_free(nerr);
- free_abs_cgroup(cgroup);
+ free(cgroup);
cgm_dbus_disconnect();
return -1;
}
cgm_dbus_disconnect();
- free_abs_cgroup(cgroup);
+ free(cgroup);
newlen = strlen(result);
if (!len || !value) {
// user queries the size
@@ -790,21 +789,22 @@ static int cgm_set(const char *filename, const char *value, const char *name, co
return -1;
*key = '\0';
- if (!cgm_dbus_connect()) {
- ERROR("Error connecting to cgroup manager");
- free(cgroup);
- return false;
- }
- cgroup = try_get_abs_cgroup(name, lxcpath, controller);
+ /* 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);
- cgm_dbus_disconnect();
return -1;
}
+
+ if (!cgm_dbus_connect()) {
+ ERROR("Error connecting to cgroup manager");
+ free(cgroup);
+ return false;
+ }
ret = cgm_do_set(controller, filename, cgroup, value);
cgm_dbus_disconnect();
- free_abs_cgroup(cgroup);
+ free(cgroup);
return ret;
}
--
1.9.1
More information about the lxc-devel
mailing list