Hi,
I have a problem with LWIP, where after some time of normal operation, all TCP communications die. After lots of headbanging, I found that tcp_tmr() stops beeing called.
I examined the functions sys_check_timeouts() and sys_timeout(), and found out that there is a problem when sys_now wraps around.
Specifically in the file timeouts.c, lines 214-220 the following snippet fails:
now = sys_now();
if (next_timeout == NULL) {
diff = 0;
timeouts_last_time = now;
} else {
diff = now - timeouts_last_time;
}
When sys_now() returns 0 (due to wrap around), the diff variable gets a huge number (as it is unsigned), and the tcp timer (and possibly other timers), are scheduled for the very very far future, leading in problematic TCP communications.
Anyone faced this problem? Is this a bug in LWIP, or maybe in my porting files? Any hints?
*Note I am using v2 RC2.