Skip to content

Commit 37c8f61

Browse files
committed
chore: clear timeouts properly
1 parent 8591c99 commit 37c8f61

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

packages/connector/src/connection/mosSocketClient.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ export class MosSocketClient extends EventEmitter {
3636
private _queueMessages: Array<QueueMessage> = []
3737

3838
private _sentMessage: QueueMessage | null = null // sent message, waiting for reply
39+
private _sentMessageTimeout?: NodeJS.Timeout
3940
private _lingeringMessage: QueueMessage | null = null // sent message, NOT waiting for reply
4041
// private _readyToSendMessage: boolean = true
4142
private _timedOutCommands: { [id: string]: number } = {}
4243

4344
private processQueueTimeout?: NodeJS.Timeout
45+
private queueCleanupTimeout?: NodeJS.Timeout
4446
// private _startingUp: boolean = true
4547
private _disposed = false
4648
private messageParser: MosMessageParser
@@ -235,6 +237,14 @@ export class MosSocketClient extends EventEmitter {
235237
clearTimeout(this.processQueueTimeout)
236238
delete this.processQueueTimeout
237239
}
240+
if (this.queueCleanupTimeout) {
241+
clearTimeout(this.queueCleanupTimeout)
242+
delete this.queueCleanupTimeout
243+
}
244+
if (this._sentMessageTimeout) {
245+
clearTimeout(this._sentMessageTimeout)
246+
this._sentMessageTimeout
247+
}
238248
if (this._client) {
239249
const client = this._client
240250
client.once('close', () => {
@@ -278,6 +288,10 @@ export class MosSocketClient extends EventEmitter {
278288
this.emit('error', `Error: No callback found for messageId ${messageId}`)
279289
}
280290
this._sentMessage = null
291+
if (this._sentMessageTimeout) {
292+
clearTimeout(this._sentMessageTimeout)
293+
delete this._sentMessageTimeout
294+
}
281295
this._lingeringMessage = null
282296
delete this._queueCallback[messageId + '']
283297
delete this._lingeringCallback[messageId + '']
@@ -288,6 +302,7 @@ export class MosSocketClient extends EventEmitter {
288302
if (this._sentMessage && !isRetry) throw Error('executeCommand: there already is a sent Command!')
289303
if (!this._client) throw Error('executeCommand: No client socket connection set up!')
290304

305+
if (this._sentMessageTimeout) clearTimeout(this._sentMessageTimeout)
291306
this._sentMessage = message
292307
this._lingeringMessage = null
293308

@@ -301,7 +316,7 @@ export class MosSocketClient extends EventEmitter {
301316

302317
const sendTime = Date.now()
303318
// Command timeout:
304-
global.setTimeout(() => {
319+
this._sentMessageTimeout = global.setTimeout(() => {
305320
if (this._disposed) return
306321
if (this._sentMessage && this._sentMessage.msg.messageID === sentMessageId) {
307322
this.debugTrace('timeout ' + sentMessageId + ' after ' + this._commandTimeout)
@@ -454,7 +469,7 @@ export class MosSocketClient extends EventEmitter {
454469
}
455470
private _triggerQueueCleanup() {
456471
// in case we're in unsync with messages, prevent deadlock:
457-
setTimeout(() => {
472+
this.queueCleanupTimeout = setTimeout(() => {
458473
if (this._disposed) return
459474
this.debugTrace('QueueCleanup')
460475
for (let i = this._queueMessages.length - 1; i >= 0; i--) {

0 commit comments

Comments
 (0)