[Asterisk-bugs] [Asterisk 0010213]: rev71656 and rev71065 makes DeadAGI exit after channel hangup
noreply at bugs.digium.com
noreply at bugs.digium.com
Tue Jul 17 23:45:04 CDT 2007
A NOTE has been added to this issue.
======================================================================
http://bugs.digium.com/view.php?id=10213
======================================================================
Reported By: lyl
Assigned To:
======================================================================
Project: Asterisk
Issue ID: 10213
Category: Resources/res_agi
Reproducibility: always
Severity: major
Priority: normal
Status: feedback
Asterisk Version: 1.2.12.1
SVN Branch (only for SVN checkouts, not tarball releases): N/A
SVN Revision (number only!):
Disclaimer on File?: Yes
Request Review:
======================================================================
Date Submitted: 07-17-2007 03:39 CDT
Last Modified: 07-17-2007 23:45 CDT
======================================================================
Summary: rev71656 and rev71065 makes DeadAGI exit after
channel hangup
Description:
for Issue 10035, the developer fixed the "silly usages of
ast_playstream()", but another problem comes, there's no DeadAGI alive
after the channels hangup.
the newest code follows: (handle_exec in res_agi.c)
return res >= 0 ? RESULT_SUCCESS : RESULT_FAILURE;
but when the channel hangs up, the res is -1, and then return
2(RESULT_FAILURE), and, the result is the DeadAGI also dead.
the solution is, I think, return best cause just in ast_playstream, but
not in the caller code, it's not the duty of the caller to identify what's
happening in the calling code.
And, for issue 10035, maybe DeadAGI can solve the problem.
======================================================================
Relationships ID Summary
----------------------------------------------------------------------
related to 0010210 [patch] res_agi, some long outstanding ...
======================================================================
----------------------------------------------------------------------
juggie - 07-17-07 23:45
----------------------------------------------------------------------
DeadAGI was *NEVER* intended to run on a live channel and then migrate to
one that is dead. The reason it works at all is rather unintended.
However i do realize that it has acted this way for sometime.
However, you must realize that once the channel in asterisk is hung up,
the agi application terminates and asterisk returns control to the
dialplan, the problem was DeadAGI was never intended to detect a hangup and
thus when it was run on a line that had an actual call, once the line was
hungup it did not return control to the asterisk dialplan until the
application was terminated (the agi script ended).
All this being said, using perl you can ignore the instruction from
asterisk to terminate your agi script (SIGHUP) you will have no further
communication with asterisk but you can clean up gracefully.
Now, that being said it is possible to have a script continue after a dial
terminates, but only if the far end hangs up, and you pass the g option
into your dial, it is possible to continue processing. Obviously if the
dialing channel hangs up the call, the channel is done and dialplan
processing goes to the h context.
I would really suggest that you consider an alternative method because
this functionality is no longer going to work. I would respectfully
suggest you use an asterisk channel variable to keep a state, and once the
AGI terminates you can rerun the same agi as a deadagi and it will know
where you left off, or the proper way to clean up, etc.
Issue History
Date Modified Username Field Change
======================================================================
07-17-07 23:45 juggie Note Added: 0067495
======================================================================
More information about the asterisk-bugs
mailing list