src/Pure/Concurrent/task_queue.ML
changeset 37216 3165bc303f66
parent 35242 1c80c29086d7
child 37854 047c96f41455
equal deleted inserted replaced
37215:91dfe7dccfdf 37216:3165bc303f66
   160   let
   160   let
   161     val _ = cancel_group group Exn.Interrupt;
   161     val _ = cancel_group group Exn.Interrupt;
   162     val tasks = Inttab.lookup_list groups (group_id group);
   162     val tasks = Inttab.lookup_list groups (group_id group);
   163     val running =
   163     val running =
   164       fold (get_job jobs #> (fn Running t => insert Thread.equal t | _ => I)) tasks [];
   164       fold (get_job jobs #> (fn Running t => insert Thread.equal t | _ => I)) tasks [];
   165     val _ = List.app SimpleThread.interrupt running;
   165     val _ = List.app Simple_Thread.interrupt running;
   166   in null running end;
   166   in null running end;
   167 
   167 
   168 fun cancel_all (Queue {groups, jobs}) =
   168 fun cancel_all (Queue {groups, jobs}) =
   169   let
   169   let
   170     fun cancel_job (group, job) (groups, running) =
   170     fun cancel_job (group, job) (groups, running) =
   171       (cancel_group group Exn.Interrupt;
   171       (cancel_group group Exn.Interrupt;
   172         (case job of
   172         (case job of
   173           Running t => (insert eq_group group groups, insert Thread.equal t running)
   173           Running t => (insert eq_group group groups, insert Thread.equal t running)
   174         | _ => (groups, running)));
   174         | _ => (groups, running)));
   175     val (running_groups, running) = Task_Graph.fold (cancel_job o #1 o #2) jobs ([], []);
   175     val (running_groups, running) = Task_Graph.fold (cancel_job o #1 o #2) jobs ([], []);
   176     val _ = List.app SimpleThread.interrupt running;
   176     val _ = List.app Simple_Thread.interrupt running;
   177   in running_groups end;
   177   in running_groups end;
   178 
   178 
   179 
   179 
   180 (* enqueue *)
   180 (* enqueue *)
   181 
   181