equal
deleted
inserted
replaced
240 val result = ref (NONE: 'a Exn.result option); |
240 val result = ref (NONE: 'a Exn.result option); |
241 val run = Multithreading.with_attributes (Thread.getAttributes ()) |
241 val run = Multithreading.with_attributes (Thread.getAttributes ()) |
242 (fn _ => fn ok => |
242 (fn _ => fn ok => |
243 let |
243 let |
244 val res = if ok then Exn.capture e () else Exn.Exn Exn.Interrupt; |
244 val res = if ok then Exn.capture e () else Exn.Exn Exn.Interrupt; |
|
245 val _ = result := SOME res; |
245 val res_ok = |
246 val res_ok = |
246 (case res of |
247 (case res of |
247 Exn.Result _ => true |
248 Exn.Result _ => true |
248 | Exn.Exn Exn.Interrupt => true |
249 | Exn.Exn Exn.Interrupt => (TaskQueue.invalidate_group group; true) |
249 | _ => false); |
250 | _ => false); |
250 in result := SOME res; res_ok end); |
251 in res_ok end); |
251 |
252 |
252 val task = SYNCHRONIZED "future" (fn () => |
253 val task = SYNCHRONIZED "future" (fn () => |
253 change_result queue (TaskQueue.enqueue group deps pri run) before notify_all ()); |
254 change_result queue (TaskQueue.enqueue group deps pri run) before notify_all ()); |
254 in Future {task = task, group = group, result = result} end; |
255 in Future {task = task, group = group, result = result} end; |
255 |
256 |