lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Problems freeing a packet buffer using pbuf_free


From: Justin Drake
Subject: [lwip-users] Problems freeing a packet buffer using pbuf_free
Date: Mon, 18 Jun 2012 15:31:11 +0100

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;
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]