src/Pure/Concurrent/task_queue.ML
changeset 44341 a93d25fb14fc
parent 44340 3b859b573f1a
child 45136 2afb928c71ca
--- a/src/Pure/Concurrent/task_queue.ML	Sun Aug 21 13:10:48 2011 +0200
+++ b/src/Pure/Concurrent/task_queue.ML	Sun Aug 21 13:23:29 2011 +0200
@@ -31,8 +31,8 @@
   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
-  val cancel_all: queue -> group list
+  val cancel: queue -> group -> task list * 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
   val enqueue: string -> group -> task list -> int -> (bool -> bool) -> queue -> task * queue
@@ -249,15 +249,14 @@
 fun cancel (Queue {groups, jobs}) group =
   let
     val _ = cancel_group group Exn.Interrupt;
-    val (tasks, threads) =
+    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)) ([], []);
-    val _ = List.app Simple_Thread.interrupt_unsynchronized threads;
-  in tasks end;
+  in running end;
 
 fun cancel_all (Queue {jobs, ...}) =
   let
@@ -270,9 +269,8 @@
           Running t => (insert eq_group group groups, insert Thread.equal t running)
         | _ => (groups, running))
       end;
-    val (running_groups, running) = Task_Graph.fold cancel_job jobs ([], []);
-    val _ = List.app Simple_Thread.interrupt_unsynchronized running;
-  in running_groups end;
+    val running = Task_Graph.fold cancel_job jobs ([], []);
+  in running end;
 
 
 (* finish *)