aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2006-03-07 00:07:27 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2006-03-07 00:07:27 +0000
commitd62038098d5317b02e556e743984443aeb23d5fe (patch)
tree039539bd1aef834b2ce28f35418dc71ed3c339b2 /channels
parent838298036beb726ed685acdfb032e550a39ca9c6 (diff)
Merged revisions 12195 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r12195 | tilghman | 2006-03-06 18:05:27 -0600 (Mon, 06 Mar 2006) | 2 lines Bug 6020 - Race condition where packet could be lost if first packet on list is acked ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@12197 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 8990c1cd5..124052c84 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1426,12 +1426,12 @@ static int __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
msg = sip_methods[sipmethod].text;
+ ast_mutex_lock(&p->lock);
cur = p->packets;
while(cur) {
if ((cur->seqno == seqno) && ((ast_test_flag(cur, FLAG_RESPONSE)) == resp) &&
((ast_test_flag(cur, FLAG_RESPONSE)) ||
(!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
- ast_mutex_lock(&p->lock);
if (!resp && (seqno == p->pendinginvite)) {
ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
p->pendinginvite = 0;
@@ -1447,13 +1447,13 @@ static int __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
ast_sched_del(sched, cur->retransid);
}
free(cur);
- ast_mutex_unlock(&p->lock);
res = 0;
break;
}
prev = cur;
cur = cur->next;
}
+ ast_mutex_unlock(&p->lock);
if (option_debug)
ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: Match %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
return res;