diff options
author | Mark Spencer <markster@digium.com> | 2005-02-26 01:16:12 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2005-02-26 01:16:12 +0000 |
commit | 3188414261b63ef05c2f2b47e3a934be87247b8e (patch) | |
tree | c704a8b7f35dedc8644786958cff575b7ea1e222 /channels/chan_sip.c | |
parent | 84ad9b3a8a67374fff407fe09ed570eff68ab7e4 (diff) |
Release RTP ports early (bug #3655)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_sip.c')
-rwxr-xr-x | channels/chan_sip.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 56de6713f..5a569616b 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -8379,6 +8379,15 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc if (p->expiry>max_expiry) p->expiry = max_expiry; } + /* Go ahead and free RTP port */ + if (p->rtp) { + ast_rtp_destroy(p->rtp); + p->rtp = NULL; + } + if (p->vrtp) { + ast_rtp_destroy(p->rtp); + p->vrtp = NULL; + } transmit_response(p, "200 OK", req); sip_scheddestroy(p, (p->expiry+10)*1000); transmit_state_notify(p, ast_extension_state(NULL, p->context, p->exten),1); @@ -8406,6 +8415,15 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc if ((res = register_verify(p, sin, req, e, ignore)) < 0) ast_log(LOG_NOTICE, "Registration from '%s' failed for '%s'\n", get_header(req, "To"), ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr)); if (res < 1) { + /* Go ahead and free RTP port */ + if (p->rtp) { + ast_rtp_destroy(p->rtp); + p->rtp = NULL; + } + if (p->vrtp) { + ast_rtp_destroy(p->rtp); + p->vrtp = NULL; + } /* Destroy the session, but keep us around for just a bit in case they don't get our 200 OK */ sip_scheddestroy(p, 15*1000); |