diff -r e44f465c00a1 -r 355d5438f5fb src/Pure/Concurrent/future.ML --- 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*)