let non_fatal ctxt f =
  try
    section_ctxt ctxt f
  with e ->
    let result_full =
      report_result_full ctxt (result_full_of_exception ctxt e)
    in
    OUnitShared.Mutex.with_lock
      ctxt.shared ctxt.non_fatal_mutex
      (fun () ->
         ctxt.non_fatal := result_full :: !(ctxt.non_fatal))