Hi,

I'm trying to use the sequential API to read and write to several
sockets simultaneously.  I'm using FreeRTOS on an AT91SAM7X256 and a
fairly recent(~1 month ago) cvs version of lwip.  I'm trying to read in
data over several connections, parse out the useful data, and then send
data back out over several other connections.  The incoming connections
are only used for incoming data, and the outgoing connections are only
used for outgoing data.  None of the streams have much data flowing
though them, at most ~1KB/s.

I got it working pretty consistently with 3 incoming connections and 1-5
outgoing connections.  I found out I had to put a ~150ms delay on the
output loop in my write thread, otherwise lwip would lock up.  However,
now I need to add a fourth incoming connection.  With the addition of
the 4th incoming connection, lwip works for anywhere from a few seconds
to a few minutes before locking up.  It seems the more outgoing
connections that lwip is trying to service, the quicker the lockup,
however, even if there aren't any outgoing connections, eventually lwip
will still lock up.  I've been playing around with debugging, and so far
I cant find anything that stands out.  The last few lines of my debug
look like this...

LWIP:     tcp_receive: window update 1052
LWIP:     tcp_receive: dupack averted 77772192 77772083
LWIP:     tcp_receive: pcb->rttest 0 rtseq 6509 ackno 6510
... then there is a long pause, followed by....
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool TCPIP_MSG_INPKT
LWIP:     memp_malloc: out of memory in pool PBUF_POOL

So, a few questions.  First, I know that lwip isn't thread safe. 
However, I'm wondering what I need to control with a semaphore or
mutex.  I've got 4 different recv functions in 4 different threads, and
a single write thread.  So I can't block for each one, otherwise only
one can be blocked in recv at a time, and it will have to timeout if
there isnt any data, which will take too long. Also, do I need to try to
serialize lwip if I'm only using each netconn for one directional data
flow?   (If each netconn is only being used for sending OR receiving,
not both )

Second, I assume that something is going wrong in netconn_recv().  I'm
also guessing that as it works fine with three recv's, but locks up with
four, it is mostly likely overwhelming a buffer with incoming data.  So,
my question is what buffer(s) should I look at increasing to see if that
helps?

Or is there something I'm missing?  Any debugging recommendations to
help nail down whats causing the error?

I can post my lwipopts.h and and send/recv code if anyone thinks that
will help.


Oh, and on a completely unrelated question, if FreeRTOS implements
malloc and free as pvPortMalloc and vPortFree, what would I need to
modify in lwip to get it to use FreeRTOS memory instead of its own?  I
assume I would need to define MEM_LIBC_MALLOC correctly, and redefine
mem_malloc and mem_free in mem.h?

Thanks


-- 
Andrew Lukefahr
[EMAIL PROTECTED]

Electrical and Computer Engineering
Univeristy of Missouri

Open Source, Open Minds


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to