Skip to content

Commit 66562d8

Browse files
authored
Dispose sockets (microsoft#4942)
Dispose sockets
1 parent 67d5be3 commit 66562d8

File tree

5 files changed

+14
-5
lines changed

5 files changed

+14
-5
lines changed

news/3 Code Health/4935.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Ensure sockets get disposed along with other resources.

src/client/debugger/debugAdapter/Common/debugStreamProvider.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,24 @@
22
// Licensed under the MIT License.
33

44
import { inject, injectable } from 'inversify';
5-
import { createServer, Socket } from 'net';
5+
import { createServer, Server, Socket } from 'net';
66
import { isTestExecution } from '../../../common/constants';
77
import { ICurrentProcess } from '../../../common/types';
88
import { IServiceContainer } from '../../../ioc/types';
99
import { IDebugStreamProvider } from '../types';
1010

1111
@injectable()
1212
export class DebugStreamProvider implements IDebugStreamProvider {
13+
private server?: Server;
1314
constructor(@inject(IServiceContainer) private readonly serviceContainer: IServiceContainer) { }
1415
public get useDebugSocketStream(): boolean {
1516
return this.getDebugPort() > 0;
1617
}
18+
public dispose() {
19+
if (this.server) {
20+
this.server.close();
21+
}
22+
}
1723
public async getInputAndOutputStreams(): Promise<{ input: NodeJS.ReadStream | Socket; output: NodeJS.WriteStream | Socket }> {
1824
const debugPort = this.getDebugPort();
1925
let debugSocket: Promise<Socket> | undefined;
@@ -27,7 +33,7 @@ export class DebugStreamProvider implements IDebugStreamProvider {
2733
if (!isTestExecution()) {
2834
console.error(`waiting for debug protocol on port ${debugPort}`);
2935
}
30-
createServer((socket) => {
36+
this.server = createServer((socket) => {
3137
if (!isTestExecution()) {
3238
console.error('>> accepted connection from client');
3339
}

src/client/debugger/debugAdapter/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ class DebugManager implements Disposable {
264264
}
265265
public async start() {
266266
const debugStreamProvider = this.serviceContainer.get<IDebugStreamProvider>(IDebugStreamProvider);
267+
this.disposables.push(debugStreamProvider);
267268
const { input, output } = await debugStreamProvider.getInputAndOutputStreams();
268269
this.isServerMode = debugStreamProvider.useDebugSocketStream;
269270
this.inputStream = input;

src/client/debugger/debugAdapter/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export interface IProtocolLogger extends Disposable {
3737
}
3838

3939
export const IDebugStreamProvider = Symbol('IDebugStreamProvider');
40-
export interface IDebugStreamProvider {
40+
export interface IDebugStreamProvider extends Disposable {
4141
readonly useDebugSocketStream: boolean;
4242
getInputAndOutputStreams(): Promise<{ input: NodeJS.ReadStream | Socket; output: NodeJS.WriteStream | Socket }>;
4343
}

src/client/unittests/unittest/runner.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { inject, injectable } from 'inversify';
44
import * as path from 'path';
55
import { EXTENSION_ROOT_DIR } from '../../common/constants';
6-
import { ILogger } from '../../common/types';
6+
import { IDisposableRegistry, ILogger } from '../../common/types';
77
import { createDeferred, Deferred } from '../../common/utils/async';
88
import { noop } from '../../common/utils/misc';
99
import { IServiceContainer } from '../../ioc/types';
@@ -49,6 +49,7 @@ export class TestManagerRunner implements ITestManagerRunner {
4949
this.server = this.serviceContainer.get<IUnitTestSocketServer>(IUnitTestSocketServer);
5050
this.logger = this.serviceContainer.get<ILogger>(ILogger);
5151
this.helper = this.serviceContainer.get<IUnitTestHelper>(IUnitTestHelper);
52+
this.serviceContainer.get<IDisposableRegistry>(IDisposableRegistry).push(this.server);
5253
}
5354

5455
// tslint:disable-next-line:max-func-body-length
@@ -73,7 +74,7 @@ export class TestManagerRunner implements ITestManagerRunner {
7374
const statusDetails = outcomeMapping.get(data.outcome)!;
7475
if (test) {
7576
test.testFunction.status = statusDetails.status;
76-
switch (test.testFunction.status){
77+
switch (test.testFunction.status) {
7778
case TestStatus.Error:
7879
case TestStatus.Fail: {
7980
test.testFunction.passed = false;

0 commit comments

Comments
 (0)