mirror of
https://github.com/apache/nuttx.git
synced 2025-05-08 22:32:04 +08:00
sched/timer: remove critical section in setitimer
Signed-off-by: hujun5 <hujun5@xiaomi.com>
This commit is contained in:
parent
fcfc300f7a
commit
3193457dd0
@ -134,9 +134,12 @@ void timer_deleteall(pid_t pid)
|
||||
{
|
||||
FAR struct posix_timer_s *timer;
|
||||
FAR struct posix_timer_s *next;
|
||||
sq_queue_t freetimers;
|
||||
irqstate_t flags;
|
||||
|
||||
flags = enter_critical_section();
|
||||
sq_init(&freetimers);
|
||||
|
||||
flags = spin_lock_irqsave(&g_locktimers);
|
||||
for (timer = (FAR struct posix_timer_s *)g_alloctimers.head;
|
||||
timer != NULL;
|
||||
timer = next)
|
||||
@ -144,11 +147,21 @@ void timer_deleteall(pid_t pid)
|
||||
next = timer->flink;
|
||||
if (timer->pt_owner == pid)
|
||||
{
|
||||
timer_delete((timer_t)timer);
|
||||
sq_rem((FAR sq_entry_t *)timer, (FAR sq_queue_t *)&g_alloctimers);
|
||||
sq_addlast((FAR sq_entry_t *)timer, (FAR sq_queue_t *)&freetimers);
|
||||
}
|
||||
}
|
||||
|
||||
leave_critical_section(flags);
|
||||
spin_unlock_irqrestore(&g_locktimers, flags);
|
||||
|
||||
for (timer = (FAR struct posix_timer_s *)freetimers.head;
|
||||
timer != NULL;
|
||||
timer = next)
|
||||
{
|
||||
next = timer->flink;
|
||||
sq_rem((FAR sq_entry_t *)timer, (FAR sq_queue_t *)&freetimers);
|
||||
timer_release(timer);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
Loading…
x
Reference in New Issue
Block a user