mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 11:58:40 +00:00
Merged revisions 120169 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r120169 | russell | 2008-06-03 16:35:11 -0500 (Tue, 03 Jun 2008) | 12 lines Merged revisions 120168 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r120168 | russell | 2008-06-03 16:34:55 -0500 (Tue, 03 Jun 2008) | 4 lines Fix another place where peer->callno could change at a very bad time, and also fix a place where a peer was used after the reference was released. (inspired by rev 120001) ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@120170 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -9699,15 +9699,17 @@ static char *handle_cli_iax2_provision(struct ast_cli_entry *e, int cmd, struct
|
||||
static void __iax2_poke_noanswer(const void *data)
|
||||
{
|
||||
struct iax2_peer *peer = (struct iax2_peer *)data;
|
||||
int callno;
|
||||
|
||||
if (peer->lastms > -1) {
|
||||
ast_log(LOG_NOTICE, "Peer '%s' is now UNREACHABLE! Time: %d\n", peer->name, peer->lastms);
|
||||
manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "ChannelType: IAX2\r\nPeer: IAX2/%s\r\nPeerStatus: Unreachable\r\nTime: %d\r\n", peer->name, peer->lastms);
|
||||
ast_device_state_changed("IAX2/%s", peer->name); /* Activate notification */
|
||||
}
|
||||
if (peer->callno > 0) {
|
||||
ast_mutex_lock(&iaxsl[peer->callno]);
|
||||
iax2_destroy(peer->callno);
|
||||
ast_mutex_unlock(&iaxsl[peer->callno]);
|
||||
if ((callno = peer->callno) > 0) {
|
||||
ast_mutex_lock(&iaxsl[callno]);
|
||||
iax2_destroy(callno);
|
||||
ast_mutex_unlock(&iaxsl[callno]);
|
||||
}
|
||||
peer->callno = 0;
|
||||
peer->lastms = -1;
|
||||
@@ -9760,7 +9762,7 @@ static int iax2_poke_peer(struct iax2_peer *peer, int heldcall)
|
||||
}
|
||||
if (heldcall)
|
||||
ast_mutex_unlock(&iaxsl[heldcall]);
|
||||
peer->callno = find_callno(0, 0, &peer->addr, NEW_FORCE, peer->sockfd, 0);
|
||||
callno = peer->callno = find_callno(0, 0, &peer->addr, NEW_FORCE, peer->sockfd, 0);
|
||||
if (heldcall)
|
||||
ast_mutex_lock(&iaxsl[heldcall]);
|
||||
if (peer->callno < 1) {
|
||||
@@ -9790,7 +9792,11 @@ static int iax2_poke_peer(struct iax2_peer *peer, int heldcall)
|
||||
peer_unref(peer);
|
||||
|
||||
/* And send the poke */
|
||||
send_command(iaxs[peer->callno], AST_FRAME_IAX, IAX_COMMAND_POKE, 0, NULL, 0, -1);
|
||||
ast_mutex_lock(&iaxsl[callno]);
|
||||
if (iaxs[callno]) {
|
||||
send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_POKE, 0, NULL, 0, -1);
|
||||
}
|
||||
ast_mutex_unlock(&iaxsl[callno]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user