33#include <string.h>
44#include "mpi.h"
55
6+ void print_error (const char * msg , int rc )
7+ {
8+ char err_str [MPI_MAX_ERROR_STRING ];
9+ int resultlen = sizeof (err_str ) - 1 ;
10+
11+ MPI_Error_string (rc , err_str , & resultlen );
12+ fprintf (stderr , "%s return err code = %d (%s)\n" , msg , rc , err_str );
13+ }
14+
615void my_session_errhandler (MPI_Session * foo , int * bar , ...)
716{
817 fprintf (stderr , "errhandler called with error %d\n" , * bar );
@@ -19,29 +28,34 @@ int main (int argc, char *argv[])
1928
2029 rc = MPI_Session_create_errhandler (my_session_errhandler , & errhandler );
2130 if (MPI_SUCCESS != rc ) {
22- fprintf ( stderr , "Error handler creation failed with rc = %d\n " , rc );
23- abort () ;
31+ print_error ( "Error handler creation failed" , rc );
32+ return -1 ;
2433 }
2534
2635 rc = MPI_Info_create (& info );
2736 if (MPI_SUCCESS != rc ) {
28- fprintf ( stderr , "Info creation failed with rc = %d\n " , rc );
29- abort () ;
37+ print_error ( "Info creation failed" , rc );
38+ return -1 ;
3039 }
3140
3241 rc = MPI_Info_set (info , "mpi_thread_support_level" , "MPI_THREAD_MULTIPLE" );
3342 if (MPI_SUCCESS != rc ) {
34- fprintf ( stderr , "Info key/val set failed with rc = %d\n " , rc );
35- abort () ;
43+ print_error ( "Info key/val set failed" , rc );
44+ return -1 ;
3645 }
3746
3847 rc = MPI_Session_init (info , errhandler , & session );
3948 if (MPI_SUCCESS != rc ) {
40- fprintf ( stderr , "Session initialization failed with rc = %d\n " , rc );
41- abort () ;
49+ print_error ( "Session initialization failed" , rc );
50+ return -1 ;
4251 }
4352
4453 rc = MPI_Session_get_num_psets (session , MPI_INFO_NULL , & npsets );
54+ if (MPI_SUCCESS != rc ) {
55+ print_error ("Session get num psets failed" , rc );
56+ return -1 ;
57+ }
58+
4559 for (i = 0 ; i < npsets ; ++ i ) {
4660 int psetlen = 0 ;
4761 char name [256 ];
@@ -52,11 +66,15 @@ int main (int argc, char *argv[])
5266
5367 rc = MPI_Group_from_session_pset (session , "mpi://WORLD" , & group );
5468 if (MPI_SUCCESS != rc ) {
55- fprintf ( stderr , "Could not get a group for mpi://WORLD. rc = %d\n " , rc );
56- abort () ;
69+ print_error ( "Could not get a group for mpi://WORLD" , rc );
70+ return -1 ;
5771 }
5872
59- MPI_Comm_create_from_group (group , "my_world" , MPI_INFO_NULL , MPI_ERRORS_RETURN , & comm_world );
73+ rc = MPI_Comm_create_from_group (group , "my_world" , MPI_INFO_NULL , MPI_ERRORS_RETURN , & comm_world );
74+ if (MPI_SUCCESS != rc ) {
75+ print_error ("Could not get a comm from group" , rc );
76+ return -1 ;
77+ }
6078 MPI_Group_free (& group );
6179
6280 MPI_Allreduce (& one , & sum , 1 , MPI_INT , MPI_SUM , comm_world );
@@ -65,11 +83,16 @@ int main (int argc, char *argv[])
6583
6684 rc = MPI_Group_from_session_pset (session , "mpi://SELF" , & group );
6785 if (MPI_SUCCESS != rc ) {
68- fprintf ( stderr , "Could not get a group for mpi://SELF. rc = %d\n " , rc );
69- abort () ;
86+ print_error ( "Could not get a group for mpi://SELF" , rc );
87+ return -1 ;
7088 }
7189
7290 MPI_Comm_create_from_group (group , "myself" , MPI_INFO_NULL , MPI_ERRORS_RETURN , & comm_self );
91+ if (MPI_SUCCESS != rc ) {
92+ print_error ("Could not get a comm from group" , rc );
93+ return -1 ;
94+ }
95+
7396 MPI_Group_free (& group );
7497 MPI_Allreduce (& one , & sum , 1 , MPI_INT , MPI_SUM , comm_self );
7598
@@ -81,33 +104,38 @@ int main (int argc, char *argv[])
81104
82105 MPI_Comm_free (& comm_world );
83106 MPI_Comm_free (& comm_self );
84- MPI_Session_finalize (& session );
85- printf ("Finished first finalize\n" );
107+ rc = MPI_Session_finalize (& session );
108+ if (MPI_SUCCESS != rc ) {
109+ print_error ("Session finalize returned error" , rc );
110+ return -1 ;
111+ }
112+
113+ fprintf (stderr , "Finished first finalize\n" );
86114
87115 rc = MPI_Session_create_errhandler (my_session_errhandler , & errhandler );
88116 if (MPI_SUCCESS != rc ) {
89- fprintf ( stderr , "Error handler creation failed with rc = %d\n " , rc );
90- abort () ;
117+ print_error ( "Error handler creation failed" , rc );
118+ return -1 ;
91119 }
92120
93121 rc = MPI_Info_create (& info );
94122 if (MPI_SUCCESS != rc ) {
95- fprintf ( stderr , "Info creation failed with rc = %d\n " , rc );
96- abort () ;
123+ print_error ( "Info creation failed" , rc );
124+ return -1 ;
97125 }
98126
99127 rc = MPI_Info_set (info , "mpi_thread_support_level" , "MPI_THREAD_MULTIPLE" );
100128 if (MPI_SUCCESS != rc ) {
101- fprintf ( stderr , "Info key/val set failed with rc = %d\n " , rc );
102- abort () ;
129+ print_error ( "Info key/val set failed" , rc );
130+ return -1 ;
103131 }
104132
105133 printf ("Starting second init\n" );
106134 rc = MPI_Session_init (info , errhandler , & session );
107135 printf ("Finished second init\n" );
108136 if (MPI_SUCCESS != rc ) {
109- fprintf ( stderr , "Session initialization failed with rc = %d\n " , rc );
110- abort () ;
137+ print_error ( "Session initialization failed" , rc );
138+ return -1 ;
111139 }
112140
113141 rc = MPI_Session_get_num_psets (session , MPI_INFO_NULL , & npsets );
@@ -121,8 +149,8 @@ int main (int argc, char *argv[])
121149
122150 rc = MPI_Group_from_session_pset (session , "mpi://WORLD" , & group );
123151 if (MPI_SUCCESS != rc ) {
124- fprintf ( stderr , "Could not get a group for mpi://WORLD. rc = %d\n " , rc );
125- abort () ;
152+ print_error ( "Could not get a group for mpi://WORLD" , rc );
153+ return -1 ;
126154 }
127155
128156 MPI_Comm_create_from_group (group , "my_world" , MPI_INFO_NULL , MPI_ERRORS_RETURN , & comm_world );
@@ -135,8 +163,8 @@ int main (int argc, char *argv[])
135163
136164 rc = MPI_Group_from_session_pset (session , "mpi://SELF" , & group );
137165 if (MPI_SUCCESS != rc ) {
138- fprintf ( stderr , "Could not get a group for mpi://SELF. rc = %d\n " , rc );
139- abort () ;
166+ print_error ( "Could not get a group for mpi://SELF " , rc );
167+ return -1 ;
140168 }
141169
142170 MPI_Comm_create_from_group (group , "myself" , MPI_INFO_NULL , MPI_ERRORS_RETURN , & comm_self );
0 commit comments