Be more paranoid about cleaning up escape sequence handlers.

This commit is contained in:
Per Bothner
2018-12-23 12:27:26 -08:00
parent 29cc0bf933
commit 48ff841d6a
+12 -1
View File
@@ -283,8 +283,17 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
this._errorHandlerFb = null;
this._printHandler = null;
this._executeHandlers = null;
this._csiHandlers = null;
this._escHandlers = null;
let handlers;
while ((handlers = this._csiHandlers) && handlers.dispose !== undefined) {
handlers.dispose();
if (handlers === this._csiHandlers) { break; } // sanity check
}
this._csiHandlers = null;
while ((handlers = this._oscHandlers) && handlers.dispose !== undefined) {
handlers.dispose();
if (handlers === this._oscHandlers) { break; } // sanity check
}
this._oscHandlers = null;
this._dcsHandlers = null;
this._activeDcsHandler = null;
@@ -319,6 +328,8 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
if (cur === newHead) {
if (previous) { previous.nextHandler = cur.nextHandler; }
else { handlers[index] = cur.nextHandler; }
cur.nextHandler = null;
handlers = null; newCallback = null; // just in case
break;
}
}