@@ -177,45 +177,86 @@ static void backend_fatal_aggregate(char *type,
177177 char * name , int * error_code ,
178178 va_list arglist )
179179{
180- char * arg , * prefix , * err_msg = "Unknown error" ;
181- bool err_msg_need_free = false;
180+ char * arg = NULL , * prefix = NULL , * err_msg = NULL ;
181+ const char * const unknown_error_code = "Error code: %d (no associated error message)" ;
182+ const char * const unknown_error = "Unknown error" ;
183+ const char * const unknown_prefix = "[?:?]" ;
184+
185+ // these do not own what they point to; they're
186+ // here to avoid repeating expressions such as
187+ // (NULL == foo) ? unknown_foo : foo
188+ const char * usable_prefix = unknown_prefix ;
189+ const char * usable_err_msg = unknown_error ;
182190
183191 assert (ompi_mpi_initialized && !ompi_mpi_finalized );
184192
185193 arg = va_arg (arglist , char * );
186194 va_end (arglist );
187195
188- asprintf (& prefix , "[%s:%d]" , ompi_process_info .nodename ,
189- (int ) ompi_process_info .pid );
196+ if (asprintf (& prefix , "[%s:%d]" ,
197+ ompi_process_info .nodename ,
198+ (int ) ompi_process_info .pid ) == -1 ) {
199+ prefix = NULL ;
200+ // non-fatal, we could still go on to give useful information here...
201+ opal_output (0 , "%s" , "Could not write node and PID to prefix" );
202+ opal_output (0 , "Node: %s" , ompi_process_info .nodename );
203+ opal_output (0 , "PID: %d" , (int ) ompi_process_info .pid );
204+ }
190205
191206 if (NULL != error_code ) {
192207 err_msg = ompi_mpi_errnum_get_string (* error_code );
193208 if (NULL == err_msg ) {
194- err_msg_need_free = true;
195- asprintf (& err_msg , "Error code: %d (no associated error message)" ,
196- * error_code );
209+ if (asprintf (& err_msg , unknown_error_code ,
210+ * error_code ) == -1 ) {
211+ err_msg = NULL ;
212+ opal_output (0 , "%s" , "Could not write to err_msg" );
213+ opal_output (0 , unknown_error_code , * error_code );
214+ }
197215 }
198216 }
199217
218+ usable_prefix = (NULL == prefix ) ? unknown_prefix : prefix ;
219+ usable_err_msg = (NULL == err_msg ) ? unknown_error : err_msg ;
220+
200221 if (NULL != name ) {
201222 opal_show_help ("help-mpi-errors.txt" ,
202- "mpi_errors_are_fatal" , false,
203- prefix , (NULL == arg ) ? "" : "in" ,
223+ "mpi_errors_are_fatal" ,
224+ false,
225+ usable_prefix ,
226+ (NULL == arg ) ? "" : "in" ,
204227 (NULL == arg ) ? "" : arg ,
205- prefix , OMPI_PROC_MY_NAME -> jobid , OMPI_PROC_MY_NAME -> vpid ,
206- prefix , type , name , prefix , err_msg , prefix , type , prefix );
228+ usable_prefix ,
229+ OMPI_PROC_MY_NAME -> jobid ,
230+ OMPI_PROC_MY_NAME -> vpid ,
231+ usable_prefix ,
232+ type ,
233+ name ,
234+ usable_prefix ,
235+ usable_err_msg ,
236+ usable_prefix ,
237+ type ,
238+ usable_prefix );
207239 } else {
208240 opal_show_help ("help-mpi-errors.txt" ,
209- "mpi_errors_are_fatal unknown handle" , false,
210- prefix , (NULL == arg ) ? "" : "in" ,
241+ "mpi_errors_are_fatal unknown handle" ,
242+ false,
243+ usable_prefix ,
244+ (NULL == arg ) ? "" : "in" ,
211245 (NULL == arg ) ? "" : arg ,
212- prefix , OMPI_PROC_MY_NAME -> jobid , OMPI_PROC_MY_NAME -> vpid ,
213- prefix , type , prefix , err_msg , prefix , type , prefix );
246+ usable_prefix ,
247+ OMPI_PROC_MY_NAME -> jobid ,
248+ OMPI_PROC_MY_NAME -> vpid ,
249+ usable_prefix ,
250+ type ,
251+ usable_prefix ,
252+ usable_err_msg ,
253+ usable_prefix ,
254+ type ,
255+ usable_prefix );
214256 }
215257
216- if (err_msg_need_free ) {
217- free (err_msg );
218- }
258+ free (prefix );
259+ free (err_msg );
219260}
220261
221262/*
0 commit comments