lwip-users
[Top][All Lists]
Advanced

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

Re: RE : [lwip-users] netconn_connct returning always ERR_OK


From: Marko Panger
Subject: Re: RE : [lwip-users] netconn_connct returning always ERR_OK
Date: Mon, 21 Jan 2008 18:18:27 +0100
User-agent: Thunderbird 2.0.0.9 (Windows/20071031)

Hi Jonathan,

Good point !! Now I remember that something was very strange to me regarding this semaphore. Well, to be sure I have to check with the debugger but for now I can only comment what could be happening inside. I'll try to describe it:

1) netconn_new_with_proto_and_callback() creates the semaphore and the semaphore is initialized to 0. After that tcpip_apimsg() is invoked which sends the do_newconn() function to the main tcp thread. The tcpip_apimsg() function pends on the op_completed semaphore with 0 time.

2) Depending on the task priorities the tcpip_apimsg() function might return immediately with ERR_OK. When the main tcp thread completes the do_newconn() function the op_semaphore is posted and after that it has the value of 1.

3) When then I call netconn_connect() the semaphore is already posted, thus returning immediately with ERR_OK.

This is what I can reduce from observing the code. It seems like a race condition which is depends on task priorities. Please don't get me wrong - I have to check this with the debugger.

marko


Jonathan Larmour wrote:
Marko Panger wrote:
Hi again,

I'm still unable to reproduce the proper behavior or the behavior as Frédéric described below. The point is still that netconn_connect() returns ERR_OK even if there is nobody listening on the other side.

What happens behind the scenes is that a message will get posted to the tcpip thread's mailbox, and the calling thread should wait on a per-connection semaphore (called op_completed) for the tcpip thread to indicate that the operation has completed.

Perhaps somehow that semaphore did not have the correct state before the call - perhaps it had already been signaled? Or had not been created in the port with a value of 0 - in netconn_alloc() in api_msg.c, lwIP requests it to be created with a value of 0, but perhaps something doesn't do it right in the port?

Jifl





reply via email to

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