net: lwm2m: fix periodic services handling
This fixes an issue where if timestamp == service_due_timestamp, we don't call the periodic service. Then the following call to engine_next_service_timeout_ms() returns 0 because the service is still due and lwm2m_engine_service() is called again. This process repeats several times until the value of k_uptime_get() changes and then the work is finally handled. Previously, the resolution of k_uptime_get() was in ms. A recent change to this API defaults Zephyr so that the resolution is set via CONFIG_SYS_CLOCK_TICKS_PER_SEC (default 100). This means the value of k_uptime_get() only changes every 10ms. Reported-by: Github User pieterjanc Signed-off-by: Michael Scott <mike@foundries.io>
This commit is contained in:
parent
42abfc6532
commit
cb2bfcb9c0
1 changed files with 1 additions and 1 deletions
|
@ -3804,7 +3804,7 @@ static int lwm2m_engine_service(void)
|
|||
service_due_timestamp = srv->last_timestamp +
|
||||
K_MSEC(srv->min_call_period);
|
||||
/* service is due */
|
||||
if (timestamp > service_due_timestamp) {
|
||||
if (timestamp >= service_due_timestamp) {
|
||||
srv->last_timestamp = k_uptime_get();
|
||||
srv->service_work(NULL);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue