MCPcopy Create free account
hub / github.com/Starry-OS/StarryOS / alarm_task

Function alarm_task

core/src/time.rs:227–267  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

225}
226
227async fn alarm_task() {
228 loop {
229 let guard = ALARM_LIST.lock();
230 let Some(entry) = guard.peek() else {
231 drop(guard);
232 listener!(EVENT_NEW_TIMER => listener);
233
234 if !ALARM_LIST.lock().is_empty() {
235 continue;
236 }
237 listener.await;
238
239 continue;
240 };
241
242 let now = wall_time();
243 if entry.deadline <= now {
244 let entry_deadline = entry.deadline;
245 if let Some(task) = entry.task.upgrade() {
246 drop(guard);
247 poll_timer(&task);
248 } else {
249 drop(guard);
250 }
251 let mut guard = ALARM_LIST.lock();
252 assert!(guard.pop().is_some_and(|it| it.deadline == entry_deadline));
253 } else {
254 let deadline = entry.deadline;
255 drop(guard);
256 listener!(EVENT_NEW_TIMER => listener);
257 if ALARM_LIST
258 .lock()
259 .peek()
260 .is_none_or(|it| it.deadline != deadline)
261 {
262 continue;
263 }
264 let _ = timeout_at(Some(deadline), listener).await;
265 }
266 }
267}
268
269/// Spawns the alarm task.
270pub fn spawn_alarm_task() {

Callers 1

spawn_alarm_taskFunction · 0.85

Calls 2

poll_timerFunction · 0.85
is_emptyMethod · 0.80

Tested by

no test coverage detected