diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-14 17:31:39 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-08-14 17:31:39 +0000 |
commit | e6b16c78e198bda72cf476ff05aa05401c450b91 (patch) | |
tree | 3f79c1c2abc5dab369b1fad2fdde0364e02aaf67 /channels | |
parent | 9160c285937e915eafc585bbad59be1299e61d0c (diff) |
Fix some memory leaks throughout chan_iax2 related to the use of realtime.
I found these while working on iax2_peer object reference tracking.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@79436 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_iax2.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 0b9bd9b80..931939331 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -5701,8 +5701,11 @@ static int update_registry(struct sockaddr_in *sin, int callno, char *devtype, i return -1; } ast_mutex_lock(&iaxsl[callno]); - if (!iaxs[callno]) + if (!iaxs[callno]) { + if (ast_test_flag(p, IAX_TEMPONLY)) + destroy_peer(p); return -1; + } if (ast_test_flag((&globalflags), IAX_RTUPDATE) && (ast_test_flag(p, IAX_TEMPONLY|IAX_RTCACHEFRIENDS))) { if (sin->sin_addr.s_addr) { @@ -5742,8 +5745,11 @@ static int update_registry(struct sockaddr_in *sin, int callno, char *devtype, i } /* Make sure our call still exists, an INVAL at the right point may make it go away */ - if (!iaxs[callno]) + if (!iaxs[callno]) { + if (ast_test_flag(p, IAX_TEMPONLY)) + destroy_peer(p); return 0; + } /* Store socket fd */ p->sockfd = fd; @@ -5807,8 +5813,11 @@ static int registry_authrequest(int callno) ast_mutex_unlock(&iaxsl[callno]); p = find_peer(peer_name, 1); ast_mutex_lock(&iaxsl[callno]); - if (!iaxs[callno]) + if (!iaxs[callno]) { + if (p && ast_test_flag(p, IAX_TEMPONLY)) + destroy_peer(p); return -1; + } if (p) { memset(&ied, 0, sizeof(ied)); iax_ie_append_short(&ied, IAX_IE_AUTHMETHODS, p->authmethods); @@ -10020,6 +10029,9 @@ static int function_iaxpeer(struct ast_channel *chan, char *cmd, char *data, cha } } + if (ast_test_flag(peer, IAX_TEMPONLY)) + destroy_peer(peer); + return 0; } |