From 4f0ab83f5fa147eeb19d0917846c9f3487ddbe9a Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Thu, 31 Aug 2023 08:03:45 -0400 Subject: [PATCH] fix #445 (#452) --- lib/tasks/dial.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/tasks/dial.js b/lib/tasks/dial.js index e16d023a..5e0c6f77 100644 --- a/lib/tasks/dial.js +++ b/lib/tasks/dial.js @@ -232,7 +232,7 @@ class TaskDial extends Task { } this._removeDtmfDetection(cs.dlg); this._removeDtmfDetection(this.dlg); - this._killOutdials(); + await this._killOutdials(); if (this.sd) { this.sd.kill(); this.sd.removeAllListeners(); @@ -353,11 +353,16 @@ class TaskDial extends Task { sd.removeAllListeners('callCreateFail'); } - _killOutdials() { + async _killOutdials() { for (const [callSid, sd] of Array.from(this.dials)) { this.logger.debug(`Dial:_killOutdials killing callSid ${callSid}`); - sd.kill().catch((err) => this.logger.info(err, `Dial:_killOutdials Error killing ${callSid}`)); + try { + await sd.kill(); + } catch (err) { + this.logger.info(err, `Dial:_killOutdials Error killing ${callSid}`); + } this._removeHandlers(sd); + this.logger.debug(`Dial:_killOutdials killed callSid ${callSid}`); } this.dials.clear(); } @@ -449,10 +454,14 @@ class TaskDial extends Task { } const ms = await cs.getMS(); - this.timerRing = setTimeout(() => { + this.timerRing = setTimeout(async() => { this.logger.info(`Dial:_attemptCall: ring no answer timer ${this.timeout}s exceeded`); this.timerRing = null; - this._killOutdials(); + try { + await this._killOutdials(); + } catch (err) { + this.logger.info(err, 'Dial:_attemptCall - error killing outdials'); + } this.result = { dialCallStatus: CallStatus.NoAnswer, dialSipStatus: 487 @@ -531,7 +540,8 @@ class TaskDial extends Task { } }) .on('callStatusChange', (obj) => { - if (this.results.dialCallStatus !== CallStatus.Completed) { + if (this.results.dialCallStatus !== CallStatus.Completed && + this.results.dialCallStatus !== CallStatus.NoAnswer) { Object.assign(this.results, { dialCallStatus: obj.callStatus, dialSipStatus: obj.sipStatus,