diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c index 5cb946fb516e4ef534d84f52daf2be4bae86dba7..25024c1064bcf955a121688cdbcb0d469fd65534 100644 --- a/src/channels/chan_voicemngr.c +++ b/src/channels/chan_voicemngr.c @@ -3035,8 +3035,20 @@ static void handle_dect_event(struct chan_voicemngr_subchannel *sub, struct chan } } else if (event == EVENT_RELEASE) { ast_log(LOG_NOTICE, "EVENT_RELEASE detected for phone line %d\n", sub->parent->line_id); - if (sub->channel_state == AWAITONHOOK && sub_peer->channel_state == ONHOOK) { + + // Delete timer + if (sub->congestion_timer_id != -1) { + if(ast_sched_del(sched, sub->congestion_timer_id)){ + ast_log(LOG_WARNING, "Failed to remove scheduled congestion tone timer\n"); + } + sub->congestion_timer_id = -1; + } + + // Update state + if (sub->channel_state == AWAITONHOOK && (sub_peer->channel_state == ONHOOK || sub_peer->channel_state == CALLENDED)) { chan_voicemngr_close_connection(sub); + sub->channel_state = ONHOOK; + sub_peer->channel_state = ONHOOK; } else if (sub->channel_state == INCALL && sub_peer->channel_state != CALLWAITING) { ast_log(LOG_ERROR, "Hanging up call\n"); ast_queue_control(owner, AST_CONTROL_HANGUP);