Fabian Koch wrote:

> Big Fat Warning! This is not how it works! You are cleary violating
> threading rules here!!! Don't ever access the pcb from a different
> thread than the tcpip_thread or you will get random results!

This poses some more questions...

Until now I used:

conn->pcb.tcp->state        : to print the state of my connections
conn->pcb.ip->ttl                : as a replacement of SOCKET_SO_IP_TTL
conn->pcb.tcp->keep_idle: as a replacement of SOCKET_SO_KEEPALIVE

I think the first one I got from this list because I asked for a way to get the TCP state. The other two I use because I don't use the socket-API and have disabled it but still need to present a set_sock_opt sort of fuction to the outside.

Any ideas how I can make that work (even though it all worked until now)?

This is a basic multithreading question: variables that are read using an atomic instruction are 'relatively' safe to read from another thread (since the are always correct, only you don't know at which point you read: they can be changed from the other thread at any time). However, if you read an U32 on a 16-bit platform, you are likely to get garbage if the thread is interrupted between the 2 read instructions necessary to read 32 bit.

The variables you read/write from the wrong thread are relatively static, so no wonder it works for you. However, the correct way to do it is to use tcpip_callback() to get a user-specific function called in the tcpip_thread(), where you are free to do with the pcb whatever you like :-)

Like I said, I'd be willing to send patches to get accepted so that I can use a vanilla release some day.

No patches necessary there. What else are you missing to use lwIP as is?

*BTW: could you please respond in ASCII, not HTML? The font in your responses 
is very small sometimes!*


Simon


_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to