From ee8a02cec254baee7e297d18cda874372781c86e Mon Sep 17 00:00:00 2001 From: mic Date: Wed, 5 Mar 2025 22:31:41 +0100 Subject: [PATCH] Implement locking mechanism in saveReportData to prevent concurrent access --- js/mzta-spamreport.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/js/mzta-spamreport.js b/js/mzta-spamreport.js index 308dad7b..8349017d 100644 --- a/js/mzta-spamreport.js +++ b/js/mzta-spamreport.js @@ -21,23 +21,30 @@ export const taSpamReport = { logger: console, _internal_data_id: 'mzta-spam-report-data', _max_reports: 100, + lock: false, async saveReportData(data, data_id){ + while (this.lock) { + await new Promise((resolve) => setTimeout(resolve, 100)); // Wait for the lock to be released + } + + this.lock = true; let obj = await browser.storage.session.get(taSpamReport._internal_data_id); - //console.log(">>>>>>>> saveReportData obj 1: " + JSON.stringify(obj)); + // console.log(">>>>>>>> saveReportData obj 1: " + JSON.stringify(obj)); if(obj == undefined){ obj = {}; obj[taSpamReport._internal_data_id] = {}; - //console.log(">>>>>>>> saveReportData obj 2a: " + JSON.stringify(obj)); + // console.log(">>>>>>>> saveReportData obj 2a: " + JSON.stringify(obj)); } if(Object.keys(obj).length === 0){ obj[taSpamReport._internal_data_id] = {}; - //console.log(">>>>>>>> saveReportData obj 2b: " + JSON.stringify(obj)); + // console.log(">>>>>>>> saveReportData obj 2b: " + JSON.stringify(obj)); } obj[taSpamReport._internal_data_id][data_id] = data; - //console.log(">>>>>>>> saveReportData obj 3: " + JSON.stringify(obj)); + // console.log(">>>>>>>> saveReportData obj 3: " + JSON.stringify(obj)); await browser.storage.session.set(obj); + this.lock = false; }, async loadReportData(data_id){