MCPcopy Create free account
hub / github.com/Ruddle/Fomos / run_ready_tasks

Method run_ready_tasks

bootloader/kernel/src/task/executor.rs:97–124  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

95
96impl Executor {
97 fn run_ready_tasks(&mut self) {
98 // destructure `self` to avoid borrow checker errors
99 let Self {
100 tasks,
101 task_queue,
102 waker_cache,
103 spawn_queue,
104 } = self;
105
106 while let Some(task_id) = task_queue.pop() {
107 let task = match tasks.get_mut(&task_id) {
108 Some(task) => task,
109 None => continue, // task no longer exists
110 };
111 let waker = waker_cache
112 .entry(task_id)
113 .or_insert_with(|| TaskWaker::new(task_id, task_queue.clone()));
114 let mut context = Context::from_waker(waker);
115 match task.poll(&mut context) {
116 Poll::Ready(()) => {
117 // task done -> remove it and its cached waker
118 tasks.remove(&task_id);
119 waker_cache.remove(&task_id);
120 }
121 Poll::Pending => {}
122 }
123 }
124 }
125}
126
127impl Executor {

Callers 1

runMethod · 0.80

Calls 1

pollMethod · 0.45

Tested by

no test coverage detected