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