summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorLuigi Rizzo <rizzo@icir.org>2006-11-13 14:29:31 +0000
committerLuigi Rizzo <rizzo@icir.org>2006-11-13 14:29:31 +0000
commit52148c96f56f856be7cb03fc3eb9dd85a6af4c01 (patch)
tree3dbb2ba097caace2d53c28ea429335f9aecbc4e4 /channels
parentc26ccb97b990c0a0af45dc1a3188bdf42b9dc8a7 (diff)
merge from astobj2-r47450: use UNLINK to remove a packet from its queue,
and related code rearrangement. Approved by: oej This could be made better if we declared struct sip_pvt *dialpg = pkt->owner; at the beginning of the function, and use it throughout the function. I'll let the boss decide :) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@47539 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 243d139f4..cc97297a8 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1930,23 +1930,18 @@ static int retrans_pkt(void *data)
ast_set_flag(&pkt->owner->flags[0], SIP_NEEDDESTROY);
}
}
- /* In any case, go ahead and remove the packet */
+ /* Remove the packet */
for (prev = NULL, cur = pkt->owner->packets; cur; prev = cur, cur = cur->next) {
- if (cur == pkt)
- break;
+ if (cur == pkt) {
+ UNLINK(cur, pkt->owner->packets, prev);
+ sip_pvt_unlock(pkt->owner);
+ free(pkt);
+ return 0;
+ }
}
- if (cur) {
- if (prev)
- prev->next = cur->next;
- else
- pkt->owner->packets = cur->next;
- sip_pvt_unlock(pkt->owner);
- free(cur);
- pkt = NULL;
- } else
- ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
- if (pkt)
- sip_pvt_unlock(pkt->owner);
+ /* error case */
+ ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
+ sip_pvt_unlock(pkt->owner);
return 0;
}