Skip to content

Commit

Permalink
Revert "fix(listeners): avoid "too many listeners" problem (#3931)" (#…
Browse files Browse the repository at this point in the history
…4222)

This holds on to process / handlers forever.
  • Loading branch information
pavelfeldman authored Oct 23, 2020
1 parent 8f3c0d5 commit c4fbc64
Showing 1 changed file with 4 additions and 25 deletions.
29 changes: 4 additions & 25 deletions src/server/processLauncher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import { helper } from './helper';
import { Progress } from './progress';
import * as types from './types';
import { isUnderTest } from '../utils/utils';
import { EventEmitter } from 'events';

export type Env = {[key: string]: string | number | boolean | undefined};

Expand Down Expand Up @@ -59,26 +58,6 @@ export async function gracefullyCloseAll() {
await Promise.all(Array.from(gracefullyCloseSet).map(gracefullyClose => gracefullyClose().catch(e => {})));
}

class EventEmitterWrapper extends EventEmitter {
private _wrappedEvents: Set<string | symbol>;
constructor(emitter: EventEmitter) {
super();
this.setMaxListeners(0);
this._wrappedEvents = new Set();
for (const method of ['addListener', 'on', 'once', 'prependListener', 'prependOnceListener'] as const) {
this[method] = (event: string | symbol, listener: (...args: any[]) => void) => {
if (!this._wrappedEvents.has(event)) {
this._wrappedEvents.add(event);
emitter.addListener(event, (...eventArgs) => this.emit(event, ...eventArgs));
}
return super[method](event, listener);
};
}
}
}

const processWrapper = new EventEmitterWrapper(process);

export async function launchProcess(options: LaunchProcessOptions): Promise<LaunchResult> {
const cleanup = () => helper.removeFolders(options.tempDirectories);

Expand Down Expand Up @@ -136,9 +115,9 @@ export async function launchProcess(options: LaunchProcessOptions): Promise<Laun
cleanup().then(fulfillCleanup);
});

const listeners = [ helper.addEventListener(processWrapper, 'exit', killProcess) ];
const listeners = [ helper.addEventListener(process, 'exit', killProcess) ];
if (options.handleSIGINT) {
listeners.push(helper.addEventListener(processWrapper, 'SIGINT', () => {
listeners.push(helper.addEventListener(process, 'SIGINT', () => {
gracefullyClose().then(() => {
// Give tests a chance to dispatch any async calls.
if (isUnderTest())
Expand All @@ -149,9 +128,9 @@ export async function launchProcess(options: LaunchProcessOptions): Promise<Laun
}));
}
if (options.handleSIGTERM)
listeners.push(helper.addEventListener(processWrapper, 'SIGTERM', gracefullyClose));
listeners.push(helper.addEventListener(process, 'SIGTERM', gracefullyClose));
if (options.handleSIGHUP)
listeners.push(helper.addEventListener(processWrapper, 'SIGHUP', gracefullyClose));
listeners.push(helper.addEventListener(process, 'SIGHUP', gracefullyClose));
gracefullyCloseSet.add(gracefullyClose);

let gracefullyClosing = false;
Expand Down

0 comments on commit c4fbc64

Please sign in to comment.