]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
cgmanager: slow down there (don't always grab abs cgroup path)
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Tue, 20 May 2014 16:47:17 +0000 (11:47 -0500)
committerStéphane Graber <stgraber@ubuntu.com>
Tue, 20 May 2014 21:09:13 +0000 (17:09 -0400)
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@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
src/lxc/cgmanager.c

index 9b06d3182f4503e1e532ed25910f7d0652438bab..3a5525aba5b9e7aa6d671ef2e0d45a8cd03bb3ea 100644 (file)
@@ -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;
 }