Thanks for the patch, it has been applied to master branch of libcgroup. Jan
On 12/08/2015 05:09 PM, Nikola Forró wrote: > 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); > } > > ------------------------------------------------------------------------------ _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel