1 |
Replace exit listener usage with a TaskSequence instance, |
2 |
in order to guarantee that _record_binpkg_info executes |
3 |
immediately after EbuildBinpkg. This approach is similar to |
4 |
that used to fix bug 562264. |
5 |
|
6 |
X-Gentoo-bug: 578204 |
7 |
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=578204 |
8 |
--- |
9 |
pym/_emerge/EbuildBuild.py | 20 +++++++++++++++++--- |
10 |
1 file changed, 17 insertions(+), 3 deletions(-) |
11 |
|
12 |
diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py |
13 |
index 95c14e4..2941511 100644 |
14 |
--- a/pym/_emerge/EbuildBuild.py |
15 |
+++ b/pym/_emerge/EbuildBuild.py |
16 |
@@ -6,6 +6,7 @@ from __future__ import unicode_literals |
17 |
import io |
18 |
|
19 |
import _emerge.emergelog |
20 |
+from _emerge.AsynchronousTask import AsynchronousTask |
21 |
from _emerge.EbuildExecuter import EbuildExecuter |
22 |
from _emerge.EbuildPhase import EbuildPhase |
23 |
from _emerge.EbuildBinpkg import EbuildBinpkg |
24 |
@@ -320,13 +321,18 @@ class EbuildBuild(CompositeTask): |
25 |
phase="rpm", scheduler=self.scheduler, |
26 |
settings=self.settings)) |
27 |
else: |
28 |
+ # Use task_seq to guarantee that _RecordBinpkgInfo |
29 |
+ # is called immediately after EbuildBinpkg, in order |
30 |
+ # to solve bug #578204. |
31 |
+ task_seq = TaskSequence() |
32 |
task = EbuildBinpkg( |
33 |
background=self.background, |
34 |
pkg=self.pkg, scheduler=self.scheduler, |
35 |
settings=self.settings) |
36 |
- binpkg_tasks.add(task) |
37 |
- task.addExitListener( |
38 |
- self._record_binpkg_info) |
39 |
+ task_seq.add(task) |
40 |
+ task_seq.add(self._RecordBinpkgInfo( |
41 |
+ ebuild_binpkg=task, ebuild_build=self)) |
42 |
+ binpkg_tasks.add(task_seq) |
43 |
|
44 |
if binpkg_tasks: |
45 |
self._start_task(binpkg_tasks, self._buildpkg_exit) |
46 |
@@ -335,6 +341,14 @@ class EbuildBuild(CompositeTask): |
47 |
self._final_exit(build) |
48 |
self.wait() |
49 |
|
50 |
+ class _RecordBinpkgInfo(AsynchronousTask): |
51 |
+ |
52 |
+ __slots__ = ('ebuild_binpkg', 'ebuild_build',) |
53 |
+ |
54 |
+ def _start(self): |
55 |
+ self.ebuild_build._record_binpkg_info(self.ebuild_binpkg) |
56 |
+ AsynchronousTask._start(self) |
57 |
+ |
58 |
def _buildpkg_exit(self, packager): |
59 |
""" |
60 |
Released build dir lock when there is a failure or |
61 |
-- |
62 |
2.7.2 |