src/Pure/Concurrent/task_queue.ML
changeset 32192 eb09607094b3
parent 32190 4fc7a882b41e
child 32218 222f26693757
equal deleted inserted replaced
32191:348a66f821bf 32192:eb09607094b3
   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