let do_finally job1 job2 () =
let r1 = try job1 () ; None with error -> Some error in
let r2 = try job2 () ; None with error -> Some error in
match r1 , r2 with
| None , None -> ()
| Some e1 , None -> raise e1
| _ , Some e2 -> raise e2