--- a/src/Pure/Concurrent/task_queue.ML Mon Apr 09 15:10:52 2012 +0200
+++ b/src/Pure/Concurrent/task_queue.ML Mon Apr 09 17:22:23 2012 +0200
@@ -28,10 +28,11 @@
val waiting: task -> task list -> (unit -> 'a) -> 'a
type queue
val empty: queue
+ val group_tasks: queue -> group -> task list
val known_task: queue -> task -> bool
val all_passive: queue -> bool
val status: queue -> {ready: int, pending: int, running: int, passive: int}
- val cancel: queue -> group -> task list * Thread.thread list
+ val cancel: queue -> group -> Thread.thread list
val cancel_all: queue -> group list * Thread.thread list
val finish: task -> queue -> bool * queue
val enqueue_passive: group -> (unit -> bool) -> queue -> task * queue
@@ -210,6 +211,7 @@
fun make_queue groups jobs = Queue {groups = groups, jobs = jobs};
val empty = make_queue Inttab.empty Task_Graph.empty;
+fun group_tasks (Queue {groups, ...}) group = Tasks.keys (get_tasks groups (group_id group));
fun known_task (Queue {jobs, ...}) task = can (Task_Graph.get_entry jobs) task;
@@ -254,12 +256,9 @@
let
val _ = cancel_group group Exn.Interrupt;
val running =
- Tasks.fold (fn (task, _) => fn (tasks, threads) =>
- (case get_job jobs task of
- Running thread => (task :: tasks, insert Thread.equal thread threads)
- | Passive _ => (task :: tasks, threads)
- | _ => (tasks, threads)))
- (get_tasks groups (group_id group)) ([], []);
+ Tasks.fold (fn (task, _) =>
+ (case get_job jobs task of Running thread => insert Thread.equal thread | _ => I))
+ (get_tasks groups (group_id group)) [];
in running end;
fun cancel_all (Queue {jobs, ...}) =