commit:     e6be71af3f67ea274db455e9c24d5f84bd372c39
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 27 23:10:40 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep 28 16:01:18 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e6be71af

AbstractEbuildProcess: remove cgroup with release_agent (bug 561264)

Use the cgroup release_agent hook to remove cgroups automatically
upon release.

X-Gentoo-bug: 561264
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=561264
Acked-by: Alexander Berntsen <bernalex <AT> gentoo.org>

 bin/cgroup-release-agent             |  2 ++
 pym/_emerge/AbstractEbuildProcess.py | 14 +++++++-------
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/bin/cgroup-release-agent b/bin/cgroup-release-agent
new file mode 100755
index 0000000..7aa6d56
--- /dev/null
+++ b/bin/cgroup-release-agent
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec rmdir "/sys/fs/cgroup/portage/${1}"

diff --git a/pym/_emerge/AbstractEbuildProcess.py 
b/pym/_emerge/AbstractEbuildProcess.py
index 68d96e4..2b5d9c7 100644
--- a/pym/_emerge/AbstractEbuildProcess.py
+++ b/pym/_emerge/AbstractEbuildProcess.py
@@ -89,6 +89,13 @@ class AbstractEbuildProcess(SpawnProcess):
                                        subprocess.check_call(['mount', '-t', 
'cgroup',
                                                '-o', 
'rw,nosuid,nodev,noexec,none,name=portage',
                                                'tmpfs', cgroup_portage])
+                                       with open(os.path.join(
+                                               cgroup_portage, 
'release_agent'), 'w') as f:
+                                               
f.write(os.path.join(self.settings['PORTAGE_BIN_PATH'],
+                                                       'cgroup-release-agent'))
+                                       with open(os.path.join(
+                                               cgroup_portage, 
'notify_on_release'), 'w') as f:
+                                               f.write('1')
 
                                cgroup_path = 
tempfile.mkdtemp(dir=cgroup_portage,
                                        prefix='%s:%s.' % 
(self.settings["CATEGORY"],
@@ -313,13 +320,6 @@ class AbstractEbuildProcess(SpawnProcess):
        def _set_returncode(self, wait_retval):
                SpawnProcess._set_returncode(self, wait_retval)
 
-               if self.cgroup is not None:
-                       try:
-                               shutil.rmtree(self.cgroup)
-                       except EnvironmentError as e:
-                               if e.errno != errno.ENOENT:
-                                       raise
-
                if self._exit_timeout_id is not None:
                        self.scheduler.source_remove(self._exit_timeout_id)
                        self._exit_timeout_id = None

Reply via email to