From fa9b1ba94705bb84ca76fe56fe6cfe18b8f3260d Mon Sep 17 00:00:00 2001 From: likewise Date: Tue, 18 Nov 2003 01:40:08 +0000 Subject: [PATCH] Merge from DEVEL. Includes important UDP fix for bug #6601. --- src/core/udp.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/udp.c b/src/core/udp.c index 166586b7..e15e7e19 100644 --- a/src/core/udp.c +++ b/src/core/udp.c @@ -450,7 +450,7 @@ udp_send(struct udp_pcb *pcb, struct pbuf *p) q = p; LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); } - + /* { q now represents the packet to be sent */ udphdr = q->payload; udphdr->src = htons(pcb->local_port); udphdr->dest = htons(pcb->remote_port); @@ -483,7 +483,7 @@ udp_send(struct udp_pcb *pcb, struct pbuf *p) /* chksum zero must become 0xffff, as zero means 'no checksum' */ if (udphdr->chksum == 0x0000) udphdr->chksum = 0xffff; /* output to IP */ - err = ip_output_if (p, src_ip, &pcb->remote_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); + err = ip_output_if (q, src_ip, &pcb->remote_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); snmp_inc_udpoutdatagrams(); } else { LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %u\n", q->tot_len)); @@ -498,12 +498,13 @@ udp_send(struct udp_pcb *pcb, struct pbuf *p) snmp_inc_udpoutdatagrams(); LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n")); /* output to IP */ - err = ip_output_if(p, src_ip, &pcb->remote_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); + err = ip_output_if(q, src_ip, &pcb->remote_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); } /* did we chain a header earlier? */ if (q != p) { /* free the header */ + /* p is also still referenced by the caller, and will live on */ pbuf_free(q); }