Does the rx packet that you copy from get freed somewhere else?
________________________________
From: [email protected]
[mailto:[email protected]] On Behalf Of
Justin Drake
Sent: 18 June 2012 15:31
To: [email protected]
Subject: [lwip-users] Problems freeing a packet buffer using pbuf_free
I am a function to send data packets. Each time a packet is receive, I create a
buffer using `pbuf_alloc`. I then send the packet using `upd_sendto`. Finally,
I free the buffer with `pbuf_free`.
For some reason, `pbuf_free` is not freeing the buffers. (I get a buffer
overflow after `n` packets, where `n` is the pool size.)
How can I have `pbuf_free` actually free my buffers? How is the buffer overflow
avoided?
Below is my implementation:
static err_t IAP_tftp_send_data_packet(struct udp_pcb *upcb, struct ip_addr
*to, int to_port, int block)
{
err_t err;
struct pbuf *pkt_buf;
char packet[TFTP_DATA_PKT_LEN_MAX];
int bytesRead;
int bytesToSend;
/* Specify that we are sending data. */
IAP_tftp_set_opcode(packet, TFTP_DATA);
/* Specify the block number that we are sending. */
IAP_tftp_set_block(packet, block);
bytesRead = IAP_tftp_set_data(packet, block);
if(bytesRead != 0) {
bytesToSend = TFTP_DATA_PKT_LEN_MAX - (512 - bytesRead + 1);
} else {
bytesToSend = TFTP_DATA_PKT_LEN_MAX - 512;
}
pkt_buf = pbuf_alloc(PBUF_TRANSPORT, bytesToSend, PBUF_POOL);
if (!pkt_buf)
{
print("(TFTP) Buffer overflow!\r\n");
}
/* Copy the file data onto pkt_buf. */
memcpy(pkt_buf->payload, packet, bytesToSend);
err = udp_sendto(upcb, pkt_buf, to, to_port);
/* free the buffer pbuf */
printf("%d\n\r", pbuf_free(pkt_buf));
return err;
}
**********************************************************************
This e-mail from Ultra Electronics Limited and any attachments to it are
confidential to
the intended recipient and may also be privileged. If you have received it in
error please
notify the sender and delete it from your system. If you are not the intended
recipient
you must not copy it or use it for any purpose nor disclose or distribute its
contents to
any other person. All communications may be subject to interception or
monitoring for
operational and/or security purposes. Please rely on your own virus checking as
the sender
cannot accept any liability for any damage arising from any bug or virus
infection.
Ultra Electronics Limited is a company registered in England and Wales,
registration number
2830644. The address of its registered office is 417 Bridport Road, Greenford,
Middlesex, UB6 8UA.
**********************************************************************
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users