From a77d2cc81cdfeab4040888716772bf5fb6f215c2 Mon Sep 17 00:00:00 2001 From: Mariano Lopez Date: Fri, 26 Jun 2015 05:56:00 +0000 Subject: 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] (From OE-Core rev: c7bff5e7fdd2cbf6f22bfe9a74ceb6e19ef3b5d8) Signed-off-by: Mariano Lopez Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- meta/classes/report-error.bbclass | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'meta') diff --git a/meta/classes/report-error.bbclass b/meta/classes/report-error.bbclass index 9edf2ceb31..78b6ce6fef 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") 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")+".txt" -- cgit v1.2.3-54-g00ecf