summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}