[asterisk-bugs] [JIRA] (ASTERISK-30497) ChannelRedirect aborting hangup handler execution

Egil Hjelmeland (JIRA) noreply at issues.asterisk.org
Wed Apr 19 03:33:03 CDT 2023


Egil Hjelmeland created ASTERISK-30497:
------------------------------------------

             Summary: ChannelRedirect aborting hangup handler execution
                 Key: ASTERISK-30497
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-30497
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Applications/app_channelredirect
    Affects Versions: 18.17.0
            Reporter: Egil Hjelmeland


A ChannelRedirect on a channel that is in the process of hanging up can prevent 
hangup handler on the channel to complete. I believe this is a bug.

I improved the situation for our part with the following patch 

{code:none}
$ git diff 18.17.1 main/pbx.c
diff --git a/main/pbx.c b/main/pbx.c
index c655f1bcfc..68d3044cdb 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -7016,6 +7016,13 @@ int ast_async_goto(struct ast_channel *chan, const char *context, const char *ex
        struct ast_channel *newchan;
 
        ast_channel_lock(chan);
+
+       if (ast_channel_softhangup_internal_flag(chan) & ~AST_SOFTHANGUP_ASYNCGOTO) {
+               ast_log(LOG_WARNING, "ast_async_goto refusing on dying channel %s\n", ast_channel_name(chan));
+               ast_channel_unlock(chan);
+               return -1;
+       }
+
        /* Channels in a bridge or running a PBX can be sent directly to the specified destination */
        if (ast_channel_is_bridged(chan) || ast_channel_pbx(chan)) {
                if (ast_test_flag(ast_channel_flags(chan), AST_FLAG_IN_AUTOLOOP)) {
{code}

Not sure if this is the right upstream fix for the problem.

Background: For my employer I have been crafting a queuing application to our liking through dialplan programming, relying heavily on ChannelRedirect to manipulate queue call legs, func_odbc to keep track of call(_leg) states, and hangup handlers to clean up call(_leg) records in the database.




--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list