On Sun, Dec 12, 2010 at 6:30 PM, shogun <[email protected]> wrote:
> I have one more question about what is safe to run in different execution
> context for lwip (interrupt/thread). I did add an OS to my application and
> now moved some things around so data is only sent and received in the tcp/ip
> thread context. Is it recommended I move any of the following API calls to
> LWIP into the tcp/ip thread context also?
See doc/rawapi.txt:
lwIP started targeting single-threaded environments. When adding multi-
threading support, instead of making the core thread-safe, another
approach was chosen: there is one main thread running the lwIP core
(also known as the "tcpip_thread"). The raw API may only be used from
this thread! [....]
> //Called when there is an unrecoverable error etc
> static void close(struct tcp_pcb *pcb)
> {
> tcp_abort(pcb);
> tcp_close(pcb);
> }
This is wrong. tcp_abort removes the pcb. Hence, when you call
tcp_close here you are passing a pointer to de-allocated memory.
I would think of tcp_abort() and tcp_close() as mutually exclusive.
tcp_close is normal session termination. tcp_abort is used when
something catastrophic has happened and you need to immediately abort
the connection. Both de-allocate the pcb so you cannot make further
calls with that pcb.
Jeff
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users