Implement locking mechanism in saveReportData to prevent concurrent access

This commit is contained in:
mic 2025-03-05 22:31:41 +01:00
parent c8fdf3b884
commit ee8a02cec2

View file

@ -21,8 +21,14 @@ export const taSpamReport = {
logger: console, logger: console,
_internal_data_id: 'mzta-spam-report-data', _internal_data_id: 'mzta-spam-report-data',
_max_reports: 100, _max_reports: 100,
lock: false,
async saveReportData(data, data_id){ 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); 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){ if(obj == undefined){
@ -38,6 +44,7 @@ export const taSpamReport = {
obj[taSpamReport._internal_data_id][data_id] = data; 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); await browser.storage.session.set(obj);
this.lock = false;
}, },
async loadReportData(data_id){ async loadReportData(data_id){