Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://github.com/mpoquet/simgrid
[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 int main( int argc, char *argv[] )
33 {
34     int buf[2];
35     MPI_Win        win;
36     MPI_Errhandler newerr;
37     int            i;
38
39     MTest_Init( &argc, &argv );
40
41     /* Run this test multiple times to expose storage leaks (we found a leak
42        of error handlers with this test) */
43     for (i=0;i<1000; i++)  {
44         calls = 0;
45         
46         MPI_Win_create( buf, 2*sizeof(int), sizeof(int), 
47                         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 }