mirror of
https://github.com/reactos/reactos.git
synced 2024-08-14 23:49:49 +00:00
Fix a leak when doing an immediate reply to a small packet (could be PSH|ACK
with < 50 bytes, ACK|FIN, RST or similar). svn path=/trunk/; revision=35449
This commit is contained in:
parent
524d084d4d
commit
1d8b6343f6
|
@ -163,6 +163,7 @@ tcp_respond(tp, ti, m, ack, seq, flags)
|
|||
tcp_seq ack, seq;
|
||||
int flags;
|
||||
{
|
||||
struct mbuf *n;
|
||||
register int tlen;
|
||||
int win = 0;
|
||||
struct route *ro = 0;
|
||||
|
@ -221,6 +222,18 @@ tcp_respond(tp, ti, m, ack, seq, flags)
|
|||
tcp_trace(TA_OUTPUT, 0, tp, ti, 0);
|
||||
#endif
|
||||
(void) ip_output(m, NULL, ro, 0, NULL);
|
||||
#ifdef __REACTOS__
|
||||
/* We allocated m, so we are responsible for freeing it. If the mbuf
|
||||
contains a pointer to an external datablock, we (or rather, m_copy)
|
||||
didn't allocate it but pointed it to the data to send. So we have
|
||||
to cheat a little bit and keep M_FREE from freeing the external
|
||||
data block */
|
||||
while (NULL != m) {
|
||||
m->m_flags &= ~M_EXT;
|
||||
MFREE(m, n);
|
||||
m = n;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue