Skip to content

Commit 9b829cd

Browse files
committed
1 parent 830d5c4 commit 9b829cd

6 files changed

Lines changed: 33 additions & 68 deletions

File tree

src/vs/base/common/async.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -260,29 +260,35 @@ export class ThrottledDelayer<T> extends Delayer<TPromise<T>> {
260260
}
261261
}
262262

263-
export class PromiseSource<T> {
263+
/**
264+
* A barrier that is initially closed and then becomes opened permanently.
265+
*/
266+
export class Barrier {
264267

265-
private _value: TPromise<T>;
266-
private _completeCallback: Function;
267-
private _errorCallback: Function;
268+
private _isOpen: boolean;
269+
private _promise: TPromise<boolean>;
270+
private _completePromise: (v: boolean) => void;
268271

269272
constructor() {
270-
this._value = new TPromise<T>((c, e) => {
271-
this._completeCallback = c;
272-
this._errorCallback = e;
273+
this._isOpen = false;
274+
this._promise = new TPromise<boolean>((c, e, p) => {
275+
this._completePromise = c;
276+
}, () => {
277+
console.warn('You should really not try to cancel this ready promise!');
273278
});
274279
}
275280

276-
get value(): TPromise<T> {
277-
return this._value;
281+
isOpen(): boolean {
282+
return this._isOpen;
278283
}
279284

280-
complete(value?: T): void {
281-
this._completeCallback(value);
285+
open(): void {
286+
this._isOpen = true;
287+
this._completePromise(true);
282288
}
283289

284-
error(err?: any): void {
285-
this._errorCallback(err);
290+
wait(): TPromise<boolean> {
291+
return this._promise;
286292
}
287293
}
288294

src/vs/code/electron-main/sharedProcess.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
1010
import { TPromise } from 'vs/base/common/winjs.base';
1111
import { IProcessEnvironment } from 'vs/base/common/platform';
1212
import { BrowserWindow, ipcMain } from 'electron';
13-
import { PromiseSource } from 'vs/base/common/async';
1413
import { ISharedProcess } from 'vs/platform/windows/electron-main/windows';
14+
import { Barrier } from 'vs/base/common/async';
1515

1616
export class SharedProcess implements ISharedProcess {
1717

18-
private spawnPromiseSource: PromiseSource<void>;
18+
private barrier = new Barrier();
1919

2020
private window: Electron.BrowserWindow;
2121
private disposables: IDisposable[] = [];
@@ -79,37 +79,35 @@ export class SharedProcess implements ISharedProcess {
7979
constructor(
8080
private environmentService: IEnvironmentService,
8181
private userEnv: IProcessEnvironment
82-
) {
83-
this.spawnPromiseSource = new PromiseSource<void>();
84-
}
82+
) { }
8583

86-
public spawn(): void {
87-
this.spawnPromiseSource.complete();
84+
spawn(): void {
85+
this.barrier.open();
8886
}
8987

90-
public whenReady(): TPromise<void> {
91-
return this.spawnPromiseSource.value.then(() => this._whenReady);
88+
whenReady(): TPromise<void> {
89+
return this.barrier.wait().then(() => this._whenReady);
9290
}
9391

94-
public toggle(): void {
92+
toggle(): void {
9593
if (this.window.isVisible()) {
9694
this.hide();
9795
} else {
9896
this.show();
9997
}
10098
}
10199

102-
public show(): void {
100+
show(): void {
103101
this.window.show();
104102
this.window.webContents.openDevTools();
105103
}
106104

107-
public hide(): void {
105+
hide(): void {
108106
this.window.webContents.closeDevTools();
109107
this.window.hide();
110108
}
111109

112-
public dispose(): void {
110+
dispose(): void {
113111
this.disposables = dispose(this.disposables);
114112
}
115113
}

src/vs/workbench/api/node/extHostExtensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ import { ExtHostStorage } from 'vs/workbench/api/node/extHostStorage';
1515
import { createApiFactory, initializeExtensionApi } from 'vs/workbench/api/node/extHost.api.impl';
1616
import { MainContext, MainThreadExtensionServiceShape, IWorkspaceData, IEnvironment, IInitData, ExtHostExtensionServiceShape, MainThreadTelemetryShape } from './extHost.protocol';
1717
import { IExtensionMemento, ExtensionsActivator, ActivatedExtension, IExtensionAPI, IExtensionContext, EmptyExtension, IExtensionModule, ExtensionActivationTimesBuilder, ExtensionActivationTimes } from 'vs/workbench/api/node/extHostExtensionActivator';
18-
import { Barrier } from 'vs/workbench/services/extensions/node/barrier';
1918
import { ExtHostThreadService } from 'vs/workbench/services/thread/node/extHostThreadService';
2019
import { ExtHostConfiguration } from 'vs/workbench/api/node/extHostConfiguration';
2120
import { ExtHostWorkspace } from 'vs/workbench/api/node/extHostWorkspace';
2221
import { realpath } from 'fs';
2322
import { TernarySearchTree } from 'vs/base/common/map';
23+
import { Barrier } from 'vs/base/common/async';
2424

2525
class ExtensionMemento implements IExtensionMemento {
2626

src/vs/workbench/services/extensions/electron-browser/extensionService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ import { IStorageService } from 'vs/platform/storage/common/storage';
2626
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
2727
import { ExtensionHostProcessWorker } from 'vs/workbench/services/extensions/electron-browser/extensionHost';
2828
import { MainThreadService } from 'vs/workbench/services/thread/electron-browser/threadService';
29-
import { Barrier } from 'vs/workbench/services/extensions/node/barrier';
3029
import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc';
3130
import { ExtHostCustomersRegistry } from 'vs/workbench/api/electron-browser/extHostCustomers';
3231
import { IWindowService } from 'vs/platform/windows/common/windows';
3332
import { Action } from 'vs/base/common/actions';
3433
import { IDisposable } from 'vs/base/common/lifecycle';
3534
import { mark, time } from 'vs/base/common/performance';
3635
import { ILifecycleService, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
36+
import { Barrier } from 'vs/base/common/async';
3737

3838
const SystemExtensionsRoot = path.normalize(path.join(URI.parse(require.toUrl('')).fsPath, '..', 'extensions'));
3939

src/vs/workbench/services/extensions/node/barrier.ts

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/vs/workbench/services/lifecycle/electron-browser/lifecycleService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { ipcRenderer as ipc } from 'electron';
1414
import Event, { Emitter } from 'vs/base/common/event';
1515
import { IWindowService } from 'vs/platform/windows/common/windows';
1616
import { mark } from 'vs/base/common/performance';
17-
import { Barrier } from 'vs/workbench/services/extensions/node/barrier';
17+
import { Barrier } from 'vs/base/common/async';
1818

1919
export class LifecycleService implements ILifecycleService {
2020

0 commit comments

Comments
 (0)