lwip-users
[Top][All Lists]
Advanced

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

[lwip-users] udp receive callback issue


From: Bertrik Sikken
Subject: [lwip-users] udp receive callback issue
Date: Sun, 20 Nov 2005 21:00:08 +0100
User-agent: Mozilla Thunderbird 1.0.7 (Windows/20050923)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,

I spent quite a few hours tracking down an issue with the UDP receive
callback, so I'm sending the solution to this list for people who
may run into the same issue. It probably doesn't qualify as a bug.

In the UDP receive callback we get (among others) a pointer to a pbuf
chain and a pointer to the ip address of the other side as arguments.
My callback is implemented as follows:
* unpack the pbuf chain into a linear buffer and free the pbuf chain
* do something with the data
* construct a response, allocate a pbuf and put it in this pbuf chain
* send the response to the other side using udp_sendto, to the ip               
address that we got as an argument to the receive callback.
To me, this seems like a fairly typical use-case of the UDP receive
callback.

However, it did not work. It turns out that the ip address pointer
points somewhere into the pbuf chain, so it is no longer valid when
the pbuf if freed, re-allocated and filled with response data.
To make it more confusing, this made me run into a memory leak in
udp.c (not released yet, but fixed in v 1.67 in CVS).

I fixed it by explicitly copying the value of the IP address argument
of the UDP receive callback in a local variable and to use that for
udp_sendto.

Kind regards,
Bertrik
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDgNXIETD6mlrWxPURAhaNAKCqz8Q8sCtkUoUzju/mnMs4+MxKagCdEfG4
Q+bvj3V8QqNIXCOdrmcCIvM=
=ZJ/r
-----END PGP SIGNATURE-----




reply via email to

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