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