[Top][All Lists]

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

[lwip-users] lwip_close() doesn't work when lwip_write() hangs

From: alhadpalkar
Subject: [lwip-users] lwip_close() doesn't work when lwip_write() hangs
Date: Fri, 9 Oct 2015 16:36:21 -0700 (MST)

I am using branch 1.4.1 of lwip. I have a thread that connects to a remote
server and writes data to it using lwip_write(). Sometimes this hangs
indefinitely. Looks like its waiting on the op->completed semaphore which
never gets signaled. 

I tried using the SO_SNDTIMEO socket option, but that just causes panics in
my system. So I tried another approach where I use a watchdog that detects
this hang and calls lwip_close(). But it looks like LWIP doesn't like it. I
hit this assert 

netconn_free(struct netconn *conn)
  LWIP_ASSERT("PCB must be deallocated outside this function", conn->pcb.tcp
== NULL);

On debugging further it looks like we end up getting the ERR_INPROGRESS in

do_delconn(struct api_msg_msg *msg)
  /* @todo TCP: abort running write/connect? */
 if ((msg->conn->state != NETCONN_NONE) &&
     (msg->conn->state != NETCONN_LISTEN) &&
     (msg->conn->state != NETCONN_CONNECT)) {
    /* this only happens for TCP netconns */
    LWIP_ASSERT("msg->conn->type == NETCONN_TCP", msg->conn->type ==
    km_printf("err in progress\n");
    msg->err = ERR_INPROGRESS;

so we never end up cleanup up the pcbs which leads to this assert.

Is there a way around this? 

View this message in context: 
Sent from the lwip-users mailing list archive at Nabble.com.

reply via email to

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