From 564ca6394a0ff2cbe325add9e9cd9f400611d995 Mon Sep 17 00:00:00 2001 From: Luigi Rizzo Date: Mon, 22 May 2006 00:29:12 +0000 Subject: [PATCH] minor logic simplification in get_sip_pvt_byid_locked() git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@29266 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 397aa2b..648924a 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -7100,10 +7100,10 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) - This means that in some transactions, totag needs to be their tag :-) depending upon the direction */ -static struct sip_pvt *get_sip_pvt_byid_locked(char *callid, char *totag, char *fromtag) +static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *totag, const char *fromtag) { - struct sip_pvt *sip_pvt_ptr = NULL; - + struct sip_pvt *sip_pvt_ptr; + /* Search interfaces and find the match */ ast_mutex_lock(&iflock); @@ -7131,16 +7131,15 @@ static struct sip_pvt *get_sip_pvt_byid_locked(char *callid, char *totag, char * } if (option_debug > 3 && totag) - ast_log(LOG_DEBUG, "Matched %s call - their tag is %s Our tag is %s\n", ast_test_flag(&sip_pvt_ptr->flags[0], SIP_OUTGOING) ? "OUTGOING": "INCOMING", sip_pvt_ptr->theirtag, sip_pvt_ptr->tag); - - if (sip_pvt_ptr->owner) { - while(ast_channel_trylock(sip_pvt_ptr->owner)) { - ast_mutex_unlock(&sip_pvt_ptr->lock); - usleep(1); - ast_mutex_lock(&sip_pvt_ptr->lock); - if (!sip_pvt_ptr->owner) - break; - } + ast_log(LOG_DEBUG, "Matched %s call - their tag is %s Our tag is %s\n", + ast_test_flag(&sip_pvt_ptr->flags[0], SIP_OUTGOING) ? "OUTGOING": "INCOMING", + sip_pvt_ptr->theirtag, sip_pvt_ptr->tag); + + /* deadlock avoidance... */ + while (sip_pvt_ptr->owner && ast_mutex_trylock(&sip_pvt_ptr->owner->lock)) { + ast_mutex_unlock(&sip_pvt_ptr->lock); + usleep(1); + ast_mutex_lock(&sip_pvt_ptr->lock); } break; } -- 1.7.9.5