From b45ab2d926cffbba8a65873e640aab025c136c25 Mon Sep 17 00:00:00 2001 From: Amiram Wingarten Date: Thu, 18 Jun 2020 12:20:07 +0300 Subject: [PATCH] fix isInSync check to be with latest resource stat solves race condition that happens when there are several consecutive calls to saveContentChanges. since before this fix, version was passed to isInSync before asynchronously calling getFileStat there were times when it was old on the sync check but current on this.version. then onDidChangeContentsEmitter.fire was called wrongly Signed-off-by: Amiram Wingarten --- packages/filesystem/src/browser/file-resource.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/filesystem/src/browser/file-resource.ts b/packages/filesystem/src/browser/file-resource.ts index cfd2768358353..43a5c5024fae3 100644 --- a/packages/filesystem/src/browser/file-resource.ts +++ b/packages/filesystem/src/browser/file-resource.ts @@ -164,13 +164,14 @@ export class FileResource implements Resource { } protected async sync(): Promise { - if (await this.isInSync(this.version && this.version.stat)) { + if (await this.isInSync()) { return; } this.onDidChangeContentsEmitter.fire(undefined); } - protected async isInSync(current: FileStat | undefined): Promise { + protected async isInSync(): Promise { const stat = await this.getFileStat(); + const current = this.version && this.version.stat; if (!current) { return !stat; }