When investigating issue #13548, I found that gosub
authorMark Michelson <mmichelson@digium.com>
Wed, 3 Dec 2008 17:07:09 +0000 (17:07 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 3 Dec 2008 17:07:09 +0000 (17:07 +0000)
handling in app_queue was just completely wrong, mostly
because the channel operations being performed were being
done on the incorrect channel.

With this set of changes, a gosub will correctly run on
the answering queue member's channel. There are still crash
issues which occur if there are dialplan syntax errors, so
I cannot yet close the referenced issue.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@160555 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_queue.c

index e670df2..3937140 100644 (file)
@@ -3971,9 +3971,9 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
                                char *gosub_args, *gosub_argstart;
 
                                /* Set where we came from */
-                               ast_copy_string(qe->chan->context, "app_dial_gosub_virtual_context", sizeof(qe->chan->context));
-                               ast_copy_string(qe->chan->exten, "s", sizeof(qe->chan->exten));
-                               qe->chan->priority = 0;
+                               ast_copy_string(peer->context, "app_queue_gosub_virtual_context", sizeof(peer->context));
+                               ast_copy_string(peer->exten, "s", sizeof(peer->exten));
+                               peer->priority = 0;
 
                                gosub_argstart = strchr(gosubexec, ',');
                                if (gosub_argstart) {
@@ -3990,8 +3990,8 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
                                        }
                                }
                                if (gosub_args) {
-                                       res = pbx_exec(qe->chan, application, gosub_args);
-                                       ast_pbx_run(qe->chan);
+                                       res = pbx_exec(peer, application, gosub_args);
+                                       ast_pbx_run(peer);
                                        free(gosub_args);
                                        ast_debug(1, "Gosub exited with status %d\n", res);
                                } else