Hello Paul, all

found it, and this code shows it:
  next_timeout_time = (u32_t)(current_timeout_due_time +
cyclic->interval_ms);  /* overflow handled by TIME_LESS_THAN macro */
  if (TIME_LESS_THAN(next_timeout_time, now)) { ...

Timer is increased over maximum sys_now(), which overflows at (2^32)/10.

There is a bug in the ChibiOS port sys_arch.c. I created a virtual timer
that ticks every millisecond and changed sys_now(void) function to return
this timer counter instead. Running it for a day now, with shifted 2^32 -
120 seconds start-up time, and it seems that it's solved.

I will prepare patches and try to post to ChibiOS.

Thank you all,
Adam

po 31. 5. 2021 v 6:39 odesílatel Matthias Paul <p...@focus-gmbh.com> napsal:

> Hello Adam,
>
> LWIP uses the TIME_LESS_THAN macro to handle integer overflows. Please
> have a look at the usage in *core/timeouts.c* in *sys_check_timeouts()*:
>
> /* Check if timer's expiry time is greater than time and care about u32_t 
> wraparounds */
>
> #define TIME_LESS_THAN(t, compare_to) ( (((u32_t)((t)-(compare_to))) > 
> LWIP_MAX_TIMEOUT) ? 1 : 0 )
>
> Paul
>
>
> Am 28.05.2021 um 21:25 schrieb vysocan [via lwIP]:
>
> Hello Trampas,
>
> thanks for the hints. I initialized the sys ticks with 2^32 - 120 seconds,
> and I got mqtt pbuf=NULL in around 120 seconds + 120 keep alive seconds.
>
> The ChibiOs sys_arch.c port includes sys_now() (current time in
> milliseconds) following simplified implementation:
>   return ((u32_t)chVTGetSystemTimeX() - 1) / 10 + 1;
> Since it ticks at 100 uS.
>
> I guess it might cause the problems as it overflows back to 0 leaving the
> lwip timers waiting for value higher than (2^32)/10.
>
> To support my guess, I turned on another debug option and last lwip timer
> message I see is:
> sys_timeout: 2000C5DC abs_time=429497730 handler=ip_reass_tmr arg=805B28C
>
>
> Adam
>
> pá 28. 5. 2021 v 13:45 odesílatel Trampas Stern <[hidden email]
> <http:///user/SendEmail.jtp?type=node&node=36469&i=0>> napsal:
>
>> Increase the counter to a uint64_t.
>>
>> You can also start the counter at something other than zero to prove root
>> cause faster.
>>
>> Trampas
>>
>> On Fri, May 28, 2021 at 7:08 AM Adam Baron <[hidden email]
>> <http:///user/SendEmail.jtp?type=node&node=36469&i=1>> wrote:
>>
>>> Czesc Tomek :),
>>>
>>> I'll try to add it. Thanks.
>>>
>>> However, I feel like it is rather related to the problem of overflowing
>>> a uint32 counter of some kind. Since the TCP_PCBs are not freed after 2^32
>>> ticks.
>>>
>>> Adam
>>>
>>> pá 28. 5. 2021 v 9:44 odesílatel Tomasz W <[hidden email]
>>> <http:///user/SendEmail.jtp?type=node&node=36469&i=2>> napsal:
>>>
>>>> Hi (Cześć)
>>>> Lok for this
>>>> https://lists.nongnu.org/archive/html/lwip-devel/2020-12/msg00014.html
>>>> In my case it solved the problem of the web server dying after a few
>>>> days
>>>>
>>>>
>>>> pt., 28 maj 2021 o 08:58 Adam Baron <[hidden email]
>>>> <http:///user/SendEmail.jtp?type=node&node=36469&i=3>> napisał(a):
>>>> >
>>>> > Hello all,
>>>> >
>>>> > I'm having a small STM32F4 application running on devel branch of
>>>> lwip, It includes httpd, sntp, smtp client, and mqtt client. All is running
>>>> well until the fifth day, when mqtt client starts to receive pbuf=NULL and
>>>> disconnects. My reconnect routine reconnects it in some short time, but it
>>>> receives pbuf=NULL shortly after.
>>>> >
>>>> > Also later on I noticed in log: memp_malloc: out of memory in pool
>>>> TCP_PCB.
>>>> > I'm having defined MEMP_NUM_TCP_PCB as 30 and it seems enough for
>>>> normal operation, I also upped it to 50, but ended with the same problem
>>>> > In statistics the NUM_TCP_PCB increases and decreases as it should,
>>>> but after uptime past 5 days it stays high with an error flag triggered.
>>>> >
>>>> > Quite interestingly it happens exactly after 2^32 milliseconds
>>>> uptime. I tried to keep OpenOCD connected to start to peek in, but yet I
>>>> did not manage to keep the openOCD running for so long without dropping the
>>>> connection.
>>>> >
>>>> > Does anyone have any ideas please?
>>>> >
>>>> > Thanks in advance,
>>>> > --
>>>> > 731435556
>>>> > Adam Baron
>>>> > _______________________________________________
>>>> > lwip-users mailing list
>>>> > [hidden email] <http:///user/SendEmail.jtp?type=node&node=36469&i=4>
>>>> > https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>>
>>>>
>>>>
>>>> --
>>>> Pozdrawiam
>>>> Tomek
>>>>
>>>> _______________________________________________
>>>> lwip-users mailing list
>>>> [hidden email] <http:///user/SendEmail.jtp?type=node&node=36469&i=5>
>>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>>
>>>
>>>
>>> --
>>> 731435556
>>> Adam Baron
>>> _______________________________________________
>>> lwip-users mailing list
>>> [hidden email] <http:///user/SendEmail.jtp?type=node&node=36469&i=6>
>>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>>
>> _______________________________________________
>> lwip-users mailing list
>> [hidden email] <http:///user/SendEmail.jtp?type=node&node=36469&i=7>
>> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
>
>
> --
> 731435556
> Adam Baron
>
> _______________________________________________
> lwip-users mailing list
> [hidden email] <http:///user/SendEmail.jtp?type=node&node=36469&i=8>
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
> ------------------------------
> If you reply to this email, your message will be added to the discussion
> below:
>
> http://lwip.100.n7.nabble.com/Out-of-memory-in-PCP-PCB-pool-after-2-32-milliseconds-tp36460p36469.html
> To unsubscribe from lwIP, click here
> <http://lwip.100.n7.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=2&code=cGF1bEBmb2N1cy1nbWJoLmNvbXwyfC0xNzg4MTY3ODg4>
> .
> NAML
> <http://lwip.100.n7.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>
> _______________________________________________
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users



-- 
731435556
Adam Baron
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to