Index: channels/chan_iax2.c =================================================================== RCS file: /home/cvs/scripts/voip/asterisk/1.4.0/channels/chan_iax2.c,v retrieving revision 1.1 diff -u -r1.1 chan_iax2.c --- channels/chan_iax2.c 24 Jan 2007 10:28:27 -0000 1.1 +++ channels/chan_iax2.c 7 Feb 2007 09:07:04 -0000 @@ -2451,8 +2451,10 @@ peer = build_peer(peername, var, NULL, ast_test_flag((&globalflags), IAX_RTCACHEFRIENDS) ? 0 : 1); - if (!peer) + if (!peer) { + ast_variables_destroy(var); return NULL; + } for (tmp = var; tmp; tmp = tmp->next) { /* Make sure it's not a user only... */ @@ -2475,10 +2477,12 @@ dynamic = 1; } } + + ast_variables_destroy(var); + if (!peer) return NULL; - ast_variables_destroy(var); if (ast_test_flag((&globalflags), IAX_RTCACHEFRIENDS)) { ast_copy_flags(peer, &globalflags, IAX_RTAUTOCLEAR|IAX_RTCACHEFRIENDS); @@ -4747,15 +4751,15 @@ } if (!key || ast_db_get(family, key, buf, sizeof(buf))) { ast_log(LOG_WARNING, "Unable to retrieve database password for family/key '%s'!\n", user->dbsecret); - if (ast_test_flag(user, IAX_TEMPONLY)) { - destroy_user(user); - user = NULL; - } } else ast_string_field_set(iaxs[callno], secret, buf); } else ast_string_field_set(iaxs[callno], secret, user->secret); res = 0; + if (ast_test_flag(user, IAX_TEMPONLY)) { + destroy_user(user); + user = NULL; + } } ast_set2_flag(iaxs[callno], iax2_getpeertrunk(*sin), IAX_TRUNK); return res;