mirror of
https://github.com/apache/nuttx.git
synced 2026-06-01 07:45:16 +08:00
sched/timer: remove critical section in setitimer
Signed-off-by: hujun5 <hujun5@xiaomi.com>
This commit is contained in:
@@ -134,9 +134,12 @@ void timer_deleteall(pid_t pid)
|
|||||||
{
|
{
|
||||||
FAR struct posix_timer_s *timer;
|
FAR struct posix_timer_s *timer;
|
||||||
FAR struct posix_timer_s *next;
|
FAR struct posix_timer_s *next;
|
||||||
|
sq_queue_t freetimers;
|
||||||
irqstate_t flags;
|
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;
|
for (timer = (FAR struct posix_timer_s *)g_alloctimers.head;
|
||||||
timer != NULL;
|
timer != NULL;
|
||||||
timer = next)
|
timer = next)
|
||||||
@@ -144,11 +147,21 @@ void timer_deleteall(pid_t pid)
|
|||||||
next = timer->flink;
|
next = timer->flink;
|
||||||
if (timer->pt_owner == pid)
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user