Skip to content

Commit 51f636f

Browse files
committed
microsoft#134909 queue writes and fix tests
1 parent 9a3bcbe commit 51f636f

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

src/vs/platform/configuration/common/userConfigurationFileService.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export class UserConfigurationFileService implements IUserConfigurationFileServi
6666
if (edit) {
6767
content = content.substring(0, edit.offset) + edit.content + content.substring(edit.offset + edit.length);
6868
try {
69-
await this.write(VSBuffer.fromString(content), { etag, mtime });
69+
await this.fileService.writeFile(this.environmentService.settingsResource, VSBuffer.fromString(content), { etag, mtime });
7070
} catch (error) {
7171
if ((<FileOperationError>error).fileOperationResult === FileOperationResult.FILE_MODIFIED_SINCE) {
7272
throw new Error(UserConfigurationErrorCode.ERROR_FILE_MODIFIED_SINCE);
@@ -76,7 +76,10 @@ export class UserConfigurationFileService implements IUserConfigurationFileServi
7676
}
7777

7878
async write(content: VSBuffer, options?: IWriteFileOptions): Promise<void> {
79-
await this.fileService.writeFile(this.environmentService.settingsResource, content, options);
79+
// queue up writes to prevent race conditions
80+
return this.queue.queue(async () => {
81+
await this.fileService.writeFile(this.environmentService.settingsResource, content, options);
82+
});
8083
}
8184

8285
private getEdits({ value, path }: IJSONValue, modelContent: string, formattingOptions: FormattingOptions): Edit[] {

src/vs/platform/userDataSync/test/common/userDataSyncClient.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { generateUuid } from 'vs/base/common/uuid';
1616
import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request';
1717
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1818
import { ConfigurationService } from 'vs/platform/configuration/common/configurationService';
19+
import { IUserConfigurationFileService, UserConfigurationFileService } from 'vs/platform/configuration/common/userConfigurationFileService';
1920
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
2021
import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService';
2122
import { DidUninstallExtensionEvent, IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, InstallExtensionResult } from 'vs/platform/extensionManagement/common/extensionManagement';
@@ -88,6 +89,7 @@ export class UserDataSyncClient extends Disposable {
8889
const configurationService = this._register(new ConfigurationService(environmentService.settingsResource, fileService));
8990
await configurationService.initialize();
9091
this.instantiationService.stub(IConfigurationService, configurationService);
92+
this.instantiationService.stub(IUserConfigurationFileService, this.instantiationService.createInstance(UserConfigurationFileService));
9193

9294
this.instantiationService.stub(IRequestService, this.testServer);
9395

0 commit comments

Comments
 (0)