errhandler.c 2.77 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 * errhandler.c --- install abort(2) as MPI error handler to yield a
 *                  core file which can be inspected with a debugger
 *
 * Copyright  (C)  2010  Thomas Jahns <jahns@dkrz.de>
 *
 * Version: 1.0
 * Keywords:
 * Author: Thomas Jahns <jahns@dkrz.de>
 * Maintainer: Thomas Jahns <jahns@dkrz.de>
 * URL: https://www.dkrz.de/redmine/projects/show/scales-ppm
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are  permitted provided that the following conditions are
 * met:
 *
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 *
 * Neither the name of the DKRZ GmbH nor the names of its contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#include <stdlib.h>
#include <mpi.h>

#include "cfortran.h"
46
#include "core/core.h"
47
48

void
49
ppm_set_mpi_abort_handler(MPI_Comm comm)
50
51
52
53
54
55
56
57
58
59
{
  MPI_Errhandler errh;
  if (MPI_Comm_create_errhandler((MPI_Comm_errhandler_fn *)abort,
                                 &errh) != MPI_SUCCESS)
    abort_ppm(&comm, "Error handler creation failed.", __FILE__, __LINE__);
  if (MPI_Comm_set_errhandler(comm, errh) != MPI_SUCCESS)
    abort_ppm(&comm, "Error handler setup failed.", __FILE__, __LINE__);
}

void
60
ppm_set_mpi_abort_handler_fwrap(MPI_Fint *comm_f)
61
62
63
64
65
66
67
68
69
70
{
#ifdef HAVE_MPI_COMM_F2C
  MPI_Comm comm_c = MPI_Comm_f2c((MPI_Fint)*comm_f);
#else
  MPI_Comm comm_c = *comm_f;
#endif
  scales_ppm_set_mpi_abort_handler(comm_c);
}


71
FCALLSCSUB1(ppm_set_mpi_abort_handler_fwrap, SET_MPI_ABORT_HANDLER,
72
73
74
75
76
77
78
79
80
            set_mpi_abort_handler, PVOID)


/*
 * Local Variables:
 * license-project-url: "https://www.dkrz.de/redmine/projects/show/scales-ppm"
 * license-default: "bsd"
 * End:
 */