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,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){