@@ -3126,12 +3126,21 @@ void VMK::logSystem(std::string prefix, ESMC_LogMsgType_Flag msgType){
3126
3126
ESMC_LogDefault.Write(msg.str(), msgType);
3127
3127
msg.str(""); // clear
3128
3128
#ifdef MPICH_VERSION
3129
- msg << prefix << "MPICH_VERSION=" << XSTR(MPICH_VERSION);
3129
+ std::string mpich_version(XSTR(MPICH_VERSION));
3130
+ mpich_version.erase(
3131
+ std::remove(mpich_version.begin(), mpich_version.end(),
3132
+ '"'), mpich_version.end());
3133
+ msg << prefix << "MPICH_VERSION=" << mpich_version;
3130
3134
ESMC_LogDefault.Write(msg.str(), msgType);
3131
3135
msg.str(""); // clear
3136
+ if (mpich_version.rfind("3.3", 0) == 0) // broken mpi tools interface
3137
+ mpi_t_okay = false;
3132
3138
#endif
3133
3139
#ifdef CRAY_MPICH_VERSION
3134
3140
std::string cray_mpich_version(XSTR(CRAY_MPICH_VERSION));
3141
+ cray_mpich_version.erase(
3142
+ std::remove(cray_mpich_version.begin(), cray_mpich_version.end(),
3143
+ '"'), cray_mpich_version.end());
3135
3144
msg << prefix << "CRAY_MPICH_VERSION=" << cray_mpich_version;
3136
3145
ESMC_LogDefault.Write(msg.str(), msgType);
3137
3146
msg.str(""); // clear
@@ -3143,21 +3152,43 @@ void VMK::logSystem(std::string prefix, ESMC_LogMsgType_Flag msgType){
3143
3152
ESMC_LogDefault.Write(msg.str(), msgType);
3144
3153
msg.str(""); // clear
3145
3154
if (mpi_t_okay){
3155
+ int mpi_rc;
3146
3156
int provided_thread_level;
3147
- MPI_T_init_thread(VM_MPI_THREAD_LEVEL, &provided_thread_level);
3157
+ mpi_rc = MPI_T_init_thread(VM_MPI_THREAD_LEVEL, &provided_thread_level);
3158
+ if (mpi_rc != MPI_SUCCESS){
3159
+ int localrc;
3160
+ ESMC_LogDefault.MsgFoundError(ESMC_RC_INTNRL_BAD,
3161
+ "MPI_T_init_thread() did not return MPI_SUCCESS.",
3162
+ ESMC_CONTEXT, &localrc);
3163
+ throw localrc; // bail out with exception
3164
+ }
3148
3165
msg << prefix << "--- VMK::logSystem() MPI Tool Interface Control Vars ---";
3149
3166
ESMC_LogDefault.Write(msg.str(), msgType);
3150
3167
int num_cvar;
3151
- MPI_T_cvar_get_num(&num_cvar);
3168
+ mpi_rc = MPI_T_cvar_get_num(&num_cvar);
3169
+ if (mpi_rc != MPI_SUCCESS){
3170
+ int localrc;
3171
+ ESMC_LogDefault.MsgFoundError(ESMC_RC_INTNRL_BAD,
3172
+ "MPI_T_cvar_get_num() did not return MPI_SUCCESS.",
3173
+ ESMC_CONTEXT, &localrc);
3174
+ throw localrc; // bail out with exception
3175
+ }
3152
3176
char name[128], desc[1024];
3153
3177
int nameLen, descLen, verbosity, binding, scope;
3154
3178
MPI_T_enum enumtype;
3155
3179
MPI_Datatype datatype;
3156
3180
for (int i=0; i<num_cvar; i++){
3157
3181
nameLen = sizeof(name);
3158
3182
descLen = sizeof(desc);
3159
- MPI_T_cvar_get_info(i, name, &nameLen, &verbosity, &datatype, &enumtype,
3160
- desc, &descLen, &binding, &scope);
3183
+ mpi_rc = MPI_T_cvar_get_info(i, name, &nameLen, &verbosity, &datatype,
3184
+ &enumtype, desc, &descLen, &binding, &scope);
3185
+ if (mpi_rc != MPI_SUCCESS){
3186
+ int localrc;
3187
+ ESMC_LogDefault.MsgFoundError(ESMC_RC_INTNRL_BAD,
3188
+ "MPI_T_cvar_get_info() did not return MPI_SUCCESS.",
3189
+ ESMC_CONTEXT, &localrc);
3190
+ throw localrc; // bail out with exception
3191
+ }
3161
3192
msg.str(""); // clear
3162
3193
msg << prefix << "index=" << std::setw(4) << i << std::setw(60) << name
3163
3194
<< " : " << desc;
@@ -3180,7 +3211,14 @@ void VMK::logSystem(std::string prefix, ESMC_LogMsgType_Flag msgType){
3180
3211
msg << prefix << "new MPIR_CVAR_NEMESIS_SHM_EAGER_MAX_SZ=" << eagersize;
3181
3212
ESMC_LogDefault.Write(msg.str(), msgType);
3182
3213
#endif
3183
- MPI_T_finalize();
3214
+ mpi_rc = MPI_T_finalize();
3215
+ if (mpi_rc != MPI_SUCCESS){
3216
+ int localrc;
3217
+ ESMC_LogDefault.MsgFoundError(ESMC_RC_INTNRL_BAD,
3218
+ "MPI_T_finalize() did not return MPI_SUCCESS.",
3219
+ ESMC_CONTEXT, &localrc);
3220
+ throw localrc; // bail out with exception
3221
+ }
3184
3222
}
3185
3223
#endif
3186
3224
msg.str(""); // clear
0 commit comments