Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert "[TESTS] SMPI/MPICH3: Fix failing rma test"
[simgrid.git] / teshsuite / smpi / mpich3-test / rma / wincall.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *
4  *  (C) 2003 by Argonne National Laboratory.
5  *      See COPYRIGHT in top-level directory.
6  */
7 #include "mpi.h"
8 #include <stdio.h>
9 #include "mpitest.h"
10
11 /*
12 static char MTEST_Descrip[] = "Test win_call_errhandler";
13 */
14
15 static int calls = 0;
16 static int errs = 0;
17 static MPI_Win mywin;
18 void eh(MPI_Win * win, int *err, ...);
19 void eh(MPI_Win * win, int *err, ...)
20 {
21     if (*err != MPI_ERR_OTHER) {
22         errs++;
23         printf("Unexpected error code\n");
24     }
25     if (*win != mywin) {
26         errs++;
27         printf("Unexpected window\n");
28     }
29     calls++;
30     return;
31 }
32
33 int main(int argc, char *argv[])
34 {
35     int buf[2];
36     MPI_Win win;
37     MPI_Errhandler newerr;
38     int i;
39
40     MTest_Init(&argc, &argv);
41
42     /* Run this test multiple times to expose storage leaks (we found a leak
43      * of error handlers with this test) */
44     for (i = 0; i < 1000; i++) {
45         calls = 0;
46
47         MPI_Win_create(buf, 2 * sizeof(int), sizeof(int), MPI_INFO_NULL, MPI_COMM_WORLD, &win);
48         mywin = win;
49
50         MPI_Win_create_errhandler(eh, &newerr);
51
52         MPI_Win_set_errhandler(win, newerr);
53         MPI_Win_call_errhandler(win, MPI_ERR_OTHER);
54         MPI_Errhandler_free(&newerr);
55         if (calls != 1) {
56             errs++;
57             printf("Error handler not called\n");
58         }
59         MPI_Win_free(&win);
60     }
61
62     MTest_Finalize(errs);
63     MPI_Finalize();
64     return 0;
65 }