1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
4 * (C) 2003 by Argonne National Laboratory.
5 * See COPYRIGHT in top-level directory.
12 static char MTEST_Descrip[] = "Test comm_call_errhandler";
17 static MPI_Comm mycomm;
18 void eh(MPI_Comm * comm, int *err, ...);
19 void eh(MPI_Comm * comm, int *err, ...)
21 if (*err != MPI_ERR_OTHER) {
23 printf("Unexpected error code\n");
25 if (*comm != mycomm) {
27 printf("Unexpected communicator\n");
33 int main(int argc, char *argv[])
36 MPI_Errhandler newerr;
40 MTest_Init(&argc, &argv);
42 comm = MPI_COMM_WORLD;
45 MPI_Comm_create_errhandler(eh, &newerr);
47 MPI_Comm_set_errhandler(comm, newerr);
48 MPI_Comm_call_errhandler(comm, MPI_ERR_OTHER);
49 MPI_Errhandler_free(&newerr);
52 printf("Error handler not called\n");
55 /* Here we apply the test to many copies of a communicator */
56 for (reset_handler = 0; reset_handler <= 1; ++reset_handler) {
57 for (i = 0; i < 1000; i++) {
60 MPI_Comm_dup(MPI_COMM_WORLD, &comm);
62 MPI_Comm_create_errhandler(eh, &newerr);
64 MPI_Comm_set_errhandler(comm, newerr);
65 MPI_Comm_call_errhandler(comm, MPI_ERR_OTHER);
68 printf("Error handler not called\n");
70 MPI_Comm_dup(comm, &comm2);
73 /* comm2 must inherit the error handler from comm */
74 MPI_Comm_call_errhandler(comm2, MPI_ERR_OTHER);
77 printf("Error handler not called\n");
81 /* extra checking of the reference count handling */
82 MPI_Comm_set_errhandler(comm, MPI_ERRORS_ARE_FATAL);
84 MPI_Errhandler_free(&newerr);
87 MPI_Comm_free(&comm2);
93 return MTestReturnValue(errs);