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

Reply via email to