AbstractEbuildProcess: validate cgroup release agent
Since commit e6be71af3f67ea274db455e9c24d5f84bd372c39, the release agent
can refer to a temporary file if it was set while portage was updating
itself. Fix it to reset the release agent when necessary.
Fixes: e6be71af3f67 ("AbstractEbuildProcess: remove cgroup with release_agent (bug 561264)")
Acked-by: Brian Dolbec <dolsen@gentoo.org>
diff --git a/pym/_emerge/AbstractEbuildProcess.py b/pym/_emerge/AbstractEbuildProcess.py
index 2b5d9c7..8bd30a6 100644
--- a/pym/_emerge/AbstractEbuildProcess.py
+++ b/pym/_emerge/AbstractEbuildProcess.py
@@ -96,6 +96,24 @@
with open(os.path.join(
cgroup_portage, 'notify_on_release'), 'w') as f:
f.write('1')
+ else:
+ # Update release_agent if it no longer exists, because
+ # it refers to a temporary path when portage is updating
+ # itself.
+ release_agent = os.path.join(
+ cgroup_portage, 'release_agent')
+ try:
+ with open(release_agent) as f:
+ release_agent_path = f.readline().rstrip('\n')
+ except EnvironmentError:
+ release_agent_path = None
+
+ if (release_agent_path is None or
+ not os.path.exists(release_agent_path)):
+ with open(release_agent, 'w') as f:
+ f.write(os.path.join(
+ self.settings['PORTAGE_BIN_PATH'],
+ 'cgroup-release-agent'))
cgroup_path = tempfile.mkdtemp(dir=cgroup_portage,
prefix='%s:%s.' % (self.settings["CATEGORY"],