Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH] AbstractEbuildProcess: remove cgroup with release_agent (bug 561264)
Date: Sun, 27 Sep 2015 23:20:57
Message-Id: 1443396014-7050-1-git-send-email-zmedico@gentoo.org
1 Use the cgroup release_agent hook to remove cgroups automatically
2 upon release.
3
4 X-Gentoo-bug: 561264
5 X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=561264
6 ---
7 bin/cgroup-release-agent | 2 ++
8 pym/_emerge/AbstractEbuildProcess.py | 14 +++++++-------
9 2 files changed, 9 insertions(+), 7 deletions(-)
10 create mode 100755 bin/cgroup-release-agent
11
12 diff --git a/bin/cgroup-release-agent b/bin/cgroup-release-agent
13 new file mode 100755
14 index 0000000..7aa6d56
15 --- /dev/null
16 +++ b/bin/cgroup-release-agent
17 @@ -0,0 +1,2 @@
18 +#!/bin/bash
19 +exec rmdir "/sys/fs/cgroup/portage/${1}"
20 diff --git a/pym/_emerge/AbstractEbuildProcess.py b/pym/_emerge/AbstractEbuildProcess.py
21 index 68d96e4..2b5d9c7 100644
22 --- a/pym/_emerge/AbstractEbuildProcess.py
23 +++ b/pym/_emerge/AbstractEbuildProcess.py
24 @@ -89,6 +89,13 @@ class AbstractEbuildProcess(SpawnProcess):
25 subprocess.check_call(['mount', '-t', 'cgroup',
26 '-o', 'rw,nosuid,nodev,noexec,none,name=portage',
27 'tmpfs', cgroup_portage])
28 + with open(os.path.join(
29 + cgroup_portage, 'release_agent'), 'w') as f:
30 + f.write(os.path.join(self.settings['PORTAGE_BIN_PATH'],
31 + 'cgroup-release-agent'))
32 + with open(os.path.join(
33 + cgroup_portage, 'notify_on_release'), 'w') as f:
34 + f.write('1')
35
36 cgroup_path = tempfile.mkdtemp(dir=cgroup_portage,
37 prefix='%s:%s.' % (self.settings["CATEGORY"],
38 @@ -313,13 +320,6 @@ class AbstractEbuildProcess(SpawnProcess):
39 def _set_returncode(self, wait_retval):
40 SpawnProcess._set_returncode(self, wait_retval)
41
42 - if self.cgroup is not None:
43 - try:
44 - shutil.rmtree(self.cgroup)
45 - except EnvironmentError as e:
46 - if e.errno != errno.ENOENT:
47 - raise
48 -
49 if self._exit_timeout_id is not None:
50 self.scheduler.source_remove(self._exit_timeout_id)
51 self._exit_timeout_id = None
52 --
53 2.4.6

Replies