src/Pure/Concurrent/future.ML
changeset 44262 355d5438f5fb
parent 44249 64620f1d6f87
child 44268 f6a11c1da821
--- a/src/Pure/Concurrent/future.ML	Wed Aug 17 15:03:30 2011 -0700
+++ b/src/Pure/Concurrent/future.ML	Wed Aug 17 15:12:34 2011 -0700
@@ -394,8 +394,12 @@
 
 (* future jobs *)
 
-fun assign_result group result res =
+fun assign_result group result raw_res =
   let
+    val res =
+      (case raw_res of
+        Exn.Exn exn => Exn.Exn (#2 (Par_Exn.serial exn))
+      | _ => raw_res);
     val _ = Single_Assignment.assign result res
       handle exn as Fail _ =>
         (case Single_Assignment.peek result of
@@ -473,9 +477,9 @@
     NONE => Exn.Exn (Fail "Unfinished future")
   | SOME res =>
       if Exn.is_interrupt_exn res then
-        (case Exn.flatten_list (Task_Queue.group_status (Task_Queue.group_of_task (task_of x))) of
-          [] => res
-        | exns => Exn.Exn (Exn.EXCEPTIONS exns))
+        (case Task_Queue.group_status (Task_Queue.group_of_task (task_of x)) of
+          NONE => res
+        | SOME exn => Exn.Exn exn)
       else res);
 
 fun join_next deps = (*requires SYNCHRONIZED*)