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

Reply via email to