[petsc-dev] What to do when it's hopeless?
Jed Brown
jed at 59A2.org
Thu May 13 13:11:11 CDT 2010
On Thu, 13 May 2010 13:07:16 -0500, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> On May 13, 2010, at 10:48 AM, Jed Brown wrote:
>
> > I'm concerned by the following which appears in
> > PetscAttachDebuggerErrorHandler() and Petsc_MPI_DebuggerOnError():
> >
> > ierr = PetscAttachDebugger();
> > if (ierr) { /* hopeless so get out */
> > MPI_Finalize();
> > exit(*flag);
> > }
> >
> > Since the error handler is not guaranteed to be called collectively, it
> > seems completely unreasonable to call a collective function, especially
> > not one with broader scope than PETSC_COMM_WORLD. It seems to me that
> > the hopeless case should instead call MPI_Abort() on the relevant
> > communicator.
>
> You are probably right; this code fragment is so old it may have been written before I knew what MPI_Abort() was. I am changing it.
Okay, great.
> > Similarly, why does Petsc_MPI_AbortOnError() call abort()
> > instead of MPI_Abort()?
>
> I think this is clearly documented in the comment above it. Here is the comment:
>
> "This is so MPI errors in the debugger will leave all the stack
> frames. The default abort cleans up and exits."
>
> You use this error handler if you are running in the debugger (for example with -start_in_debugger). If you call MPI_Abort() it cleans up and you get no useful stack information in the debugger. I will change the comment to:
>
> "This is so MPI errors in the debugger will leave all the stack
> frames. The default MP_Abort() cleans up and exits thus providing no useful information
> in the debugger hence we call abort() instead of MPI_Abort()."
>
> Is it clear now, or am I missing something?
Much clearer, now I don't have to think to understand it.
Jed
More information about the petsc-dev
mailing list