Add lock on settings

This commit is contained in:
Andras Schmelczer 2025-11-30 14:42:50 +00:00
commit 39860f7f04

View file

@ -1,5 +1,6 @@
import type { Logger } from "../tracing/logger"; import type { Logger } from "../tracing/logger";
import { awaitAll } from "../utils/await-all"; import { awaitAll } from "../utils/await-all";
import { Lock } from "../utils/data-structures/locks";
export interface SyncSettings { export interface SyncSettings {
remoteUri: string; remoteUri: string;
@ -33,6 +34,7 @@ export const DEFAULT_SETTINGS: SyncSettings = {
export class Settings { export class Settings {
private settings: SyncSettings; private settings: SyncSettings;
private readonly lock: Lock = new Lock();
private readonly onSettingsChangeHandlers: (( private readonly onSettingsChangeHandlers: ((
newSettings: SyncSettings, newSettings: SyncSettings,
@ -83,6 +85,7 @@ export class Settings {
} }
public async setSettings(value: Partial<SyncSettings>): Promise<void> { public async setSettings(value: Partial<SyncSettings>): Promise<void> {
await this.lock.withLock(async () => {
this.logger.debug(`Updating settings with: ${JSON.stringify(value)}`); this.logger.debug(`Updating settings with: ${JSON.stringify(value)}`);
const oldSettings = this.settings; const oldSettings = this.settings;
this.settings = { this.settings = {
@ -101,6 +104,7 @@ export class Settings {
); );
await this.save(); await this.save();
});
} }
private async save(): Promise<void> { private async save(): Promise<void> {