Hello,
In my application, I had stack overflow problems caused by excessive recursive calls within the NDK.
The problem occurs when using TCP loopback (127.0.0.1) to transfer data between two tasks / sockets. If the transmit buffers of both sockets hold multiple outgoing packets, TcpOutput(), IPTxPacket(), IPRxPacket() and TcpInput() are called recursively for each packet. The stack usage was more than 16 kB in my application.
I added entry/exit logging to the NDK. This is an example of the log when this problem occurs:
sock/sock.c line 1461: SockRecv(): Total=16548
sock/sock.c line 1549: SockRecv(): SBRead()
sock/sock.c line 1596: SockRecv(): SockPrRecv()
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177663525, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177647705, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177664985, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177649165, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177666445, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177650625, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177667905, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177652085, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177669365, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177653545, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177670825, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177655005, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177672285, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177656465, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177673745, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177657925, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177675205, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177659385, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177676665, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177660845, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177678125, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177662305, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177679585, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177663765, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177681045, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177665225, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177682505, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177666685, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177683965, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177668145, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 703: TcpOutput(): Seq=2177685425, len=1460
tcp/tcpin.c line 171: TcpInput(): Entry
tcp/tcpout.c line 240: TcpOutput(): Entry
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
tcp/tcpin.c line 1060: TcpInput(): Exit
tcp/tcpout.c line 497: TcpOutput(): Exit
sock/sock.c line 1613: SockRecv(): return
Is this a known problem?
Thanks,
Ralf