64 lines
1.7 KiB
Diff
64 lines
1.7 KiB
Diff
|
From 647274d80d18686a3129a2b50605869ac5178ccf Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Nikola=20Forr=C3=B3?= <nforro@redhat.com>
|
||
|
Date: Tue, 8 Dec 2015 17:09:08 +0100
|
||
|
Subject: [PATCH 1/6] api.c: change cgroup of every thread of a process
|
||
|
|
||
|
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 0cc15c6..df90a6f 100644
|
||
|
--- a/src/api.c
|
||
|
+++ b/src/api.c
|
||
|
@@ -3177,10 +3177,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)
|
||
|
@@ -3194,11 +3197,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.17.0
|
||
|
|