--- 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*)