sched/wdog:change g_wdtickbase update situation.
In the 'wd_timer',the callback function executed by 'wd_expiration' could call wd_start,and g_wdtickbase might be updated.Subsequently, g_wdtickbase is incremented by the value of ticks, causing g_wdtickbase to be greater than the actual passage of time. Signed-off-by: yangguangcai <yangguangcai@xiaomi.com>
This commit is contained in:
parent
6ac28d5526
commit
fe30f0fa82
@ -373,6 +373,10 @@ unsigned int wd_timer(int ticks, bool noswitches)
|
||||
unsigned int ret;
|
||||
int decr;
|
||||
|
||||
/* Update clock tickbase */
|
||||
|
||||
g_wdtickbase += ticks;
|
||||
|
||||
/* Check if there are any active watchdogs to process */
|
||||
|
||||
wdog = (FAR struct wdog_s *)g_wdactivelist.head;
|
||||
@ -386,7 +390,6 @@ unsigned int wd_timer(int ticks, bool noswitches)
|
||||
|
||||
wdog->lag -= decr;
|
||||
ticks -= decr;
|
||||
g_wdtickbase += decr;
|
||||
|
||||
wdog = wdog->next;
|
||||
}
|
||||
@ -398,10 +401,6 @@ unsigned int wd_timer(int ticks, bool noswitches)
|
||||
wd_expiration();
|
||||
}
|
||||
|
||||
/* Update clock tickbase */
|
||||
|
||||
g_wdtickbase += ticks;
|
||||
|
||||
/* Return the delay for the next watchdog to expire */
|
||||
|
||||
ret = g_wdactivelist.head ?
|
||||
|
Loading…
Reference in New Issue
Block a user