When changing cgroup of multi-threaded process, only the main threads cgroup actually changed. Now all threads of a process are enumerated and cgroup is changed for each of them. --- src/api.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/src/api.c b/src/api.c index ef796ac..0bf0615 100644 --- a/src/api.c +++ b/src/api.c @@ -3293,10 +3293,13 @@ int cgroup_change_all_cgroups(void) return -ECGOTHER; while ((pid_dir = readdir(dir)) != NULL) { - int err, pid; + int err, pid, tid; uid_t euid; gid_t egid; char *procname = NULL; + DIR *tdir; + struct dirent *tid_dir = NULL; + char tpath[FILENAME_MAX] = { '\0' }; err = sscanf(pid_dir->d_name, "%i", &pid); if (err < 1) @@ -3310,11 +3313,24 @@ int cgroup_change_all_cgroups(void) if (err) continue; - err = cgroup_change_cgroup_flags(euid, - egid, procname, pid, CGFLAG_USECACHE); - if (err) - cgroup_dbg("cgroup change pid %i failed\n", pid); + snprintf(tpath, FILENAME_MAX, "%s%d/task/", path, pid); + + tdir = opendir(tpath); + if (!tdir) + continue; + + while ((tid_dir = readdir(tdir)) != NULL) { + err = sscanf(tid_dir->d_name, "%i", &tid); + if (err < 1) + continue; + + err = cgroup_change_cgroup_flags(euid, + egid, procname, tid, CGFLAG_USECACHE); + if (err) + cgroup_dbg("cgroup change tid %i failed\n", tid); + } + closedir(tdir); free(procname); } -- 2.4.3 ------------------------------------------------------------------------------ Go from Idea to Many App Stores Faster with Intel(R) XDK Give your users amazing mobile app experiences with Intel(R) XDK. Use one codebase in this all-in-one HTML5 development environment. Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs. http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140 _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel