aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-12-01 14:05:16 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-12-05 12:34:06 +0000
commit521dd3d00979a27b6932e58d5497de68abac26e1 (patch)
treeb687e70e8abdf8903b3e12886c51313117c30343
parent9f8bd475701e5d797d3ffc1ba97647101ba0b9b0 (diff)
downloadopenembedded-core-contrib-521dd3d00979a27b6932e58d5497de68abac26e1.tar.gz
lib/oe/utils: Improve multiprocess_lauch exception handling
We've seen a cryptic: "ERROR: Fatal errors occurred in subprocesses, tracebacks printed above" message from oe-selftest with no other traceback information. Improve the traceback logging to try and give a better indication of any errors that is ocurring. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/lib/oe/utils.py5
-rw-r--r--meta/lib/oeqa/selftest/cases/oelib/utils.py4
2 files changed, 7 insertions, 2 deletions
diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
index d05f517a70..8a584d6ddd 100644
--- a/meta/lib/oe/utils.py
+++ b/meta/lib/oe/utils.py
@@ -318,9 +318,10 @@ def multiprocess_launch(target, items, d, extraargs=None):
for p in launched:
p.join()
if errors:
+ msg = ""
for (e, tb) in errors:
- bb.error(str(tb))
- bb.fatal("Fatal errors occurred in subprocesses, tracebacks printed above")
+ msg = msg + str(e) + ": " + str(tb) + "\n"
+ bb.fatal("Fatal errors occurred in subprocesses:\n%s" % msg)
return results
def squashspaces(string):
diff --git a/meta/lib/oeqa/selftest/cases/oelib/utils.py b/meta/lib/oeqa/selftest/cases/oelib/utils.py
index 275aeda74e..789c6f78d2 100644
--- a/meta/lib/oeqa/selftest/cases/oelib/utils.py
+++ b/meta/lib/oeqa/selftest/cases/oelib/utils.py
@@ -66,6 +66,9 @@ class TestMultiprocessLaunch(TestCase):
def dummyerror(msg):
print("ERROR: %s" % msg)
+ def dummyfatal(msg):
+ print("ERROR: %s" % msg)
+ raise bb.BBHandledException()
@contextmanager
def captured_output():
@@ -79,6 +82,7 @@ class TestMultiprocessLaunch(TestCase):
d = bb.data_smart.DataSmart()
bb.error = dummyerror
+ bb.fatal = dummyfatal
# Assert the function returns the right results
result = multiprocess_launch(testfunction, ["3", "4", "5", "6"], d, extraargs=(d,))