diff options
author | Matthew Jordan <mjordan@digium.com> | 2015-02-26 03:03:06 +0000 |
---|---|---|
committer | Matthew Jordan <mjordan@digium.com> | 2015-02-26 03:03:06 +0000 |
commit | 34989bd9c8adf79af2aaf7a2fb1965cb590f36c5 (patch) | |
tree | 70c05c0658c4b8c219fc239a1dadc88637fc59c5 | |
parent | 53aec7a969cc9f99fafe3ceeb912ec6b5d50bdcb (diff) |
channels/chan_sip: Don't send a BYE after final response when PBX thread fails
When Asterisk fails to start a PBX thread for a new channel - for example, when
the maxcalls setting in asterisk.conf is exceeded - we currently send a final
response, and then attempt to send a BYE request to the UA. Since that's all
sorts of wrong, this patch fixes that by setting sipalreadygone on the sip_pvt
such that we don't get stuck sending BYE requests to something that does not
want it.
Note that this patch is a slight modification of the one on ASTERISK-15434.
For clarity, it explicitly calls sipalreadygone with the calls to transmit a
final response.
ASTERISK-21845
ASTERISK-15434 #close
Reported by: Makoto Dei
Tested by: Matt Jordan
patches:
sip-pbxstart-failed.patch uploaded by Makoto Dei (License 5027)
........
Merged revisions 432320 from http://svn.asterisk.org/svn/asterisk/branches/11
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432321 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | channels/chan_sip.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8eed90690..3354517f6 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -25806,11 +25806,13 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str switch(result) { case AST_PBX_FAILED: + sip_alreadygone(p); ast_log(LOG_WARNING, "Failed to start PBX :(\n"); p->invitestate = INV_COMPLETED; transmit_response_reliable(p, "503 Unavailable", req); break; case AST_PBX_CALL_LIMIT: + sip_alreadygone(p); ast_log(LOG_WARNING, "Failed to start PBX (call limit reached) \n"); p->invitestate = INV_COMPLETED; transmit_response_reliable(p, "480 Temporarily Unavailable", req); |