aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/package_deb.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-07-19 20:32:44 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-07-24 11:52:07 +0100
commitbcd47389f4b1fc69d2bb4da01933bfa1fdcae092 (patch)
tree70b9a8d43d4a29db843b66a4b5a44fff1edc7b41 /meta/classes/package_deb.bbclass
parentf7106cdf2190d9ec59132a1cb2bb431d653cd9c5 (diff)
downloadopenembedded-core-contrib-bcd47389f4b1fc69d2bb4da01933bfa1fdcae092.tar.gz
package_ipk|deb: Use oe.utils.multiprocess_launch
The current code had broken exception handling due to the use of a "traceback" variable as well as an import. Use the new library code for this instead which reduces code duplication and has fixed/improved exception handling. The chdir code can be dropped since any directory changes are in other processes now so there is no need for it here and the code no longer changes directory. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/package_deb.bbclass')
-rw-r--r--meta/classes/package_deb.bbclass51
1 files changed, 1 insertions, 50 deletions
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass
index 2e8d17d3c7..6f81591653 100644
--- a/meta/classes/package_deb.bbclass
+++ b/meta/classes/package_deb.bbclass
@@ -41,32 +41,6 @@ def debian_arch_map(arch, tune):
return arch
python do_package_deb () {
-
- import multiprocessing
- import traceback
-
- class DebianWritePkgProcess(multiprocessing.Process):
- def __init__(self, *args, **kwargs):
- multiprocessing.Process.__init__(self, *args, **kwargs)
- self._pconn, self._cconn = multiprocessing.Pipe()
- self._exception = None
-
- def run(self):
- try:
- multiprocessing.Process.run(self)
- self._cconn.send(None)
- except Exception as e:
- tb = traceback.format_exc()
- self._cconn.send((e, tb))
-
- @property
- def exception(self):
- if self._pconn.poll():
- self._exception = self._pconn.recv()
- return self._exception
-
- oldcwd = os.getcwd()
-
packages = d.getVar('PACKAGES')
if not packages:
bb.debug(1, "PACKAGES not defined, nothing to package")
@@ -76,30 +50,7 @@ python do_package_deb () {
if os.access(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"),os.R_OK):
os.unlink(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"))
- max_process = int(d.getVar("BB_NUMBER_THREADS") or os.cpu_count() or 1)
- launched = []
- error = None
- pkgs = packages.split()
- while not error and pkgs:
- if len(launched) < max_process:
- p = DebianWritePkgProcess(target=deb_write_pkg, args=(pkgs.pop(), d))
- p.start()
- launched.append(p)
- for q in launched:
- # The finished processes are joined when calling is_alive()
- if not q.is_alive():
- launched.remove(q)
- if q.exception:
- error, traceback = q.exception
- break
-
- for p in launched:
- p.join()
-
- os.chdir(oldcwd)
-
- if error:
- raise error
+ oe.utils.multiprocess_launch(deb_write_pkg, packages.split(), d, extraargs=(d,))
}
do_package_deb[vardeps] += "deb_write_pkg"
do_package_deb[vardepsexclude] = "BB_NUMBER_THREADS"