Properly free memory and remove scheduler entries when a transmission failure occurs.
authorMark Michelson <mmichelson@digium.com>
Sun, 1 Mar 2009 21:45:08 +0000 (21:45 +0000)
committerMark Michelson <mmichelson@digium.com>
Sun, 1 Mar 2009 21:45:08 +0000 (21:45 +0000)
commitc9252cbaf022407e70137926c3f6960c6fb2fc73
treeeb8a8274a11018e04c6e1a35b67f81a3c0e549a2
parentd2c5b0f1def3c49cd0eb18c64f3e855e4eb89c56
Properly free memory and remove scheduler entries when a transmission failure occurs.

Previously, only the "data" field of the sip_pkt created during __sip_reliable_xmit
was freed when XMIT_ERROR was returned by __sip_xmit. When retrans_pkt was called,
this inevitably resulted in the reading and writing of freed memory.

XMIT_ERROR is a condition meaning that we don't want to attempt resending the packet
at all. The proper action to take is to remove the scheduler entry we just created,
free the packet's data as well as the packet itself, and unlink it from the list of
packets on the sip_pvt structure.

(closes issue #14455)
Reported by: Nick_Lewis
Patches:
      14455.patch uploaded by mmichelson (license 60)
Tested by: Nick_Lewis

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@179219 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_sip.c