--- trunk/reactos/drivers/lib/oskittcp/oskittcp/tcp_output.c 2006-01-01 11:34:59 UTC (rev 20502)
+++ trunk/reactos/drivers/lib/oskittcp/oskittcp/tcp_output.c 2006-01-01 11:41:05 UTC (rev 20503)
@@ -69,7 +69,6 @@
#define IS_LOOPBACK_ADDR(addr) \
((ntohl(addr) & IN_CLASSA_NET) == (IN_LOOPBACKNET << IN_CLASSA_NSHIFT))
-
/*
* Tcp output routine: figure out what should be sent and send it.
*/
@@ -87,6 +86,9 @@
int idle, sendalot;
struct rmxp_tao *taop;
struct rmxp_tao tao_noncached;
+#ifdef __REACTOS__
+ struct mbuf *n;
+#endif
OS_DbgPrint(OSK_MID_TRACE,("Called\n"));
@@ -732,6 +734,18 @@
#endif
error = ip_output(m, tp->t_inpcb->inp_options, &tp->t_inpcb->inp_route,
so->so_options & SO_DONTROUTE, 0);
+#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
}
if (error) {
out: