208 if null (Task_Graph.imm_preds jobs task) |
208 if null (Task_Graph.imm_preds jobs task) |
209 then SOME (task, group, rev list) |
209 then SOME (task, group, rev list) |
210 else NONE |
210 else NONE |
211 | _ => NONE); |
211 | _ => NONE); |
212 val tasks = filter (can (Task_Graph.get_node jobs)) deps; |
212 val tasks = filter (can (Task_Graph.get_node jobs)) deps; |
|
213 fun result (res as (task, _, _)) = |
|
214 let |
|
215 val jobs' = set_job task (Running (Thread.self ())) jobs; |
|
216 val cache' = Unknown; |
|
217 in (SOME (res, tasks), make_queue groups jobs' cache') end; |
213 in |
218 in |
214 (case get_first ready tasks of |
219 (case get_first ready tasks of |
215 SOME (res as (task, _, _)) => |
220 SOME res => result res |
216 let |
221 | NONE => |
217 val jobs' = set_job task (Running (Thread.self ())) jobs; |
222 (case get_first (get_first ready o Task_Graph.imm_preds jobs) tasks of |
218 val cache' = Unknown; |
223 SOME res => result res |
219 in (SOME (res, tasks), make_queue groups jobs' cache') end |
224 | NONE => (NONE, queue))) |
220 | NONE => (NONE, queue)) |
|
221 end; |
225 end; |
222 |
226 |
223 |
227 |
224 (* sporadic interrupts *) |
228 (* sporadic interrupts *) |
225 |
229 |