aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/report-error.bbclass
diff options
context:
space:
mode:
authorMariano Lopez <mariano.lopez@linux.intel.com>2015-06-26 05:56:00 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-07-07 23:56:22 +0100
commit8b20eaf7cbadd0cd87cfa192d60ca1b7da435216 (patch)
treea5037a1e8e420f52bf3d4d02191cdb81421a7650 /meta/classes/report-error.bbclass
parent82661c1cbc619956bb71fc2ee0f10b4048435414 (diff)
downloadopenembedded-core-contrib-8b20eaf7cbadd0cd87cfa192d60ca1b7da435216.tar.gz
report-error.bbclass: Added file syncronization.
errorreport_handler would fail if several errors are triggered at the same time because of two proccess writting to the same file. This patch add the required syncronization to handle concurrent process. [YP #7899] Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
Diffstat (limited to 'meta/classes/report-error.bbclass')
-rw-r--r--meta/classes/report-error.bbclass11
1 files changed, 10 insertions, 1 deletions
diff --git a/meta/classes/report-error.bbclass b/meta/classes/report-error.bbclass
index c5aaaa8a11..11eee9bdc5 100644
--- a/meta/classes/report-error.bbclass
+++ b/meta/classes/report-error.bbclass
@@ -18,7 +18,6 @@ def errorreport_getdata(e):
def errorreport_savedata(e, newdata, file):
import json
logpath = e.data.getVar('ERR_REPORT_DIR', True)
- bb.utils.mkdirhier(logpath)
datafile = os.path.join(logpath, file)
with open(datafile, "w") as f:
json.dump(newdata, f, indent=4, sort_keys=True)
@@ -27,7 +26,11 @@ def errorreport_savedata(e, newdata, file):
python errorreport_handler () {
import json
+ logpath = e.data.getVar('ERR_REPORT_DIR', True)
+ datafile = os.path.join(logpath, "error-report.txt")
+
if isinstance(e, bb.event.BuildStarted):
+ bb.utils.mkdirhier(logpath)
data = {}
machine = e.data.getVar("MACHINE", False)
data['machine'] = machine
@@ -38,7 +41,9 @@ python errorreport_handler () {
data['failures'] = []
data['component'] = e.getPkgs()[0]
data['branch_commit'] = base_detect_branch(e.data) + ": " + base_detect_revision(e.data)
+ lock = bb.utils.lockfile(datafile + '.lock')
errorreport_savedata(e, data, "error-report.txt")
+ bb.utils.unlockfile(lock)
elif isinstance(e, bb.build.TaskFailed):
task = e.task
@@ -56,12 +61,16 @@ python errorreport_handler () {
else:
taskdata['log'] = "No Log"
+ lock = bb.utils.lockfile(datafile + '.lock')
jsondata = json.loads(errorreport_getdata(e))
jsondata['failures'].append(taskdata)
errorreport_savedata(e, jsondata, "error-report.txt")
+ bb.utils.unlockfile(lock)
elif isinstance(e, bb.event.BuildCompleted):
+ lock = bb.utils.lockfile(datafile + '.lock')
jsondata = json.loads(errorreport_getdata(e))
+ bb.utils.unlockfile(lock)
failures = jsondata['failures']
if(len(failures) > 0):
filename = "error_report_" + e.data.getVar("BUILDNAME", False)+".txt"