@@ -36,11 +36,13 @@ export class MosSocketClient extends EventEmitter {
36
36
private _queueMessages : Array < QueueMessage > = [ ]
37
37
38
38
private _sentMessage : QueueMessage | null = null // sent message, waiting for reply
39
+ private _sentMessageTimeout ?: NodeJS . Timeout
39
40
private _lingeringMessage : QueueMessage | null = null // sent message, NOT waiting for reply
40
41
// private _readyToSendMessage: boolean = true
41
42
private _timedOutCommands : { [ id : string ] : number } = { }
42
43
43
44
private processQueueTimeout ?: NodeJS . Timeout
45
+ private queueCleanupTimeout ?: NodeJS . Timeout
44
46
// private _startingUp: boolean = true
45
47
private _disposed = false
46
48
private messageParser : MosMessageParser
@@ -235,6 +237,14 @@ export class MosSocketClient extends EventEmitter {
235
237
clearTimeout ( this . processQueueTimeout )
236
238
delete this . processQueueTimeout
237
239
}
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
+ }
238
248
if ( this . _client ) {
239
249
const client = this . _client
240
250
client . once ( 'close' , ( ) => {
@@ -278,6 +288,10 @@ export class MosSocketClient extends EventEmitter {
278
288
this . emit ( 'error' , `Error: No callback found for messageId ${ messageId } ` )
279
289
}
280
290
this . _sentMessage = null
291
+ if ( this . _sentMessageTimeout ) {
292
+ clearTimeout ( this . _sentMessageTimeout )
293
+ delete this . _sentMessageTimeout
294
+ }
281
295
this . _lingeringMessage = null
282
296
delete this . _queueCallback [ messageId + '' ]
283
297
delete this . _lingeringCallback [ messageId + '' ]
@@ -288,6 +302,7 @@ export class MosSocketClient extends EventEmitter {
288
302
if ( this . _sentMessage && ! isRetry ) throw Error ( 'executeCommand: there already is a sent Command!' )
289
303
if ( ! this . _client ) throw Error ( 'executeCommand: No client socket connection set up!' )
290
304
305
+ if ( this . _sentMessageTimeout ) clearTimeout ( this . _sentMessageTimeout )
291
306
this . _sentMessage = message
292
307
this . _lingeringMessage = null
293
308
@@ -301,7 +316,7 @@ export class MosSocketClient extends EventEmitter {
301
316
302
317
const sendTime = Date . now ( )
303
318
// Command timeout:
304
- global . setTimeout ( ( ) => {
319
+ this . _sentMessageTimeout = global . setTimeout ( ( ) => {
305
320
if ( this . _disposed ) return
306
321
if ( this . _sentMessage && this . _sentMessage . msg . messageID === sentMessageId ) {
307
322
this . debugTrace ( 'timeout ' + sentMessageId + ' after ' + this . _commandTimeout )
@@ -454,7 +469,7 @@ export class MosSocketClient extends EventEmitter {
454
469
}
455
470
private _triggerQueueCleanup ( ) {
456
471
// in case we're in unsync with messages, prevent deadlock:
457
- setTimeout ( ( ) => {
472
+ this . queueCleanupTimeout = setTimeout ( ( ) => {
458
473
if ( this . _disposed ) return
459
474
this . debugTrace ( 'QueueCleanup' )
460
475
for ( let i = this . _queueMessages . length - 1 ; i >= 0 ; i -- ) {
0 commit comments