1 |
On Tue, 7 Jul 2015 00:23:45 -0700 |
2 |
Zac Medico <zmedico@g.o> wrote: |
3 |
|
4 |
> This fixes parallel builds of the same package, so they don't try |
5 |
> to kill eachothers processes. |
6 |
> |
7 |
> Fixes: b01a1b90d8c5 ("Add FEATURES=cgroup to isolate phase |
8 |
> processes.") X-Gentoo-Bug: 554108 |
9 |
> X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=554108 |
10 |
> --- |
11 |
> pym/_emerge/AbstractEbuildProcess.py | 21 ++++++++++++++------- |
12 |
> 1 file changed, 14 insertions(+), 7 deletions(-) |
13 |
> |
14 |
> diff --git a/pym/_emerge/AbstractEbuildProcess.py |
15 |
> b/pym/_emerge/AbstractEbuildProcess.py index 31127f4..68d96e4 100644 |
16 |
> --- a/pym/_emerge/AbstractEbuildProcess.py |
17 |
> +++ b/pym/_emerge/AbstractEbuildProcess.py |
18 |
> @@ -1,10 +1,12 @@ |
19 |
> # Copyright 1999-2012 Gentoo Foundation |
20 |
> # Distributed under the terms of the GNU General Public License v2 |
21 |
> |
22 |
> +import errno |
23 |
> import io |
24 |
> import platform |
25 |
> import stat |
26 |
> import subprocess |
27 |
> +import tempfile |
28 |
> import textwrap |
29 |
> from _emerge.SpawnProcess import SpawnProcess |
30 |
> from _emerge.EbuildBuildDir import EbuildBuildDir |
31 |
> @@ -14,7 +16,7 @@ from portage.elog import messages as elog_messages |
32 |
> from portage.localization import _ |
33 |
> from portage.package.ebuild._ipc.ExitCommand import ExitCommand |
34 |
> from portage.package.ebuild._ipc.QueryCommand import QueryCommand |
35 |
> -from portage import os |
36 |
> +from portage import shutil, os |
37 |
> from portage.util._pty import _create_pty_or_pipe |
38 |
> from portage.util import apply_secpass_permissions |
39 |
> |
40 |
> @@ -69,9 +71,7 @@ class AbstractEbuildProcess(SpawnProcess): |
41 |
> and self.phase not in |
42 |
> self._phases_without_cgroup): cgroup_root = '/sys/fs/cgroup' |
43 |
> cgroup_portage = os.path.join(cgroup_root, |
44 |
> 'portage') |
45 |
> - cgroup_path = os.path.join(cgroup_portage, |
46 |
> - '%s:%s' % |
47 |
> (self.settings["CATEGORY"], |
48 |
> - self.settings["PF"])) |
49 |
> + |
50 |
> try: |
51 |
> # cgroup tmpfs |
52 |
> if not os.path.ismount(cgroup_root): |
53 |
> @@ -90,9 +90,9 @@ class AbstractEbuildProcess(SpawnProcess): |
54 |
> '-o', |
55 |
> 'rw,nosuid,nodev,noexec,none,name=portage', 'tmpfs', cgroup_portage]) |
56 |
> |
57 |
> - # the ebuild cgroup |
58 |
> - if not os.path.isdir(cgroup_path): |
59 |
> - os.mkdir(cgroup_path) |
60 |
> + cgroup_path = |
61 |
> tempfile.mkdtemp(dir=cgroup_portage, |
62 |
> + prefix='%s:%s.' % |
63 |
> (self.settings["CATEGORY"], |
64 |
> + self.settings["PF"])) |
65 |
> except (subprocess.CalledProcessError, |
66 |
> OSError): pass |
67 |
> else: |
68 |
> @@ -313,6 +313,13 @@ class AbstractEbuildProcess(SpawnProcess): |
69 |
> def _set_returncode(self, wait_retval): |
70 |
> SpawnProcess._set_returncode(self, wait_retval) |
71 |
> |
72 |
> + if self.cgroup is not None: |
73 |
> + try: |
74 |
> + shutil.rmtree(self.cgroup) |
75 |
> + except EnvironmentError as e: |
76 |
> + if e.errno != errno.ENOENT: |
77 |
> + raise |
78 |
> + |
79 |
> if self._exit_timeout_id is not None: |
80 |
> self.scheduler.source_remove(self._exit_timeout_id) |
81 |
> self._exit_timeout_id = None |
82 |
|
83 |
Looks good, merge away :) |
84 |
|
85 |
-- |
86 |
Brian Dolbec <dolsen> |