g_commandLineContext.reset();
}
+int processExceptionAtExitForCommandLine(const std::exception &ex)
+{
+ int rc = processExceptionAtExit(ex); //Currently this aborts for GMX_LIB_MPI
+ finalizeForCommandLine(); //thus this MPI_Finalize doesn't matter
+ return rc;
+}
+
int runCommandLineModule(int argc, char *argv[],
CommandLineModuleInterface *module)
{
* \ingroup module_commandline
*/
void finalizeForCommandLine();
-
+/*! \brief
+ * Handles an exception and deinitializes after initForCommandLine.
+ *
+ * \param[in] ex Exception that is the cause for terminating the program.
+ * \returns Return code to return from main().
+ *
+ * This method should be called as the last thing before terminating the
+ * program because of an exception. See processExceptionAtExit() for details.
+ * Additionally this method undoes the work done by initForCommandLine.
+ *
+ * Does not throw.
+ */
+int processExceptionAtExitForCommandLine(const std::exception &ex);
/*! \brief
* Implements a main() method that runs a single module.
*
catch (const std::exception &ex)
{
printFatalErrorMessage(stderr, ex);
- return processExceptionAtExit(ex);
+ return processExceptionAtExitForCommandLine(ex);
}
}
catch (const std::exception &ex)
{
gmx::printFatalErrorMessage(stderr, ex);
- return gmx::processExceptionAtExit(ex);
+ return gmx::processExceptionAtExitForCommandLine(ex);
}
}
* \endcode
catch (const std::exception &ex)
{
gmx::printFatalErrorMessage(stderr, ex);
- return gmx::processExceptionAtExit(ex);
+ return gmx::processExceptionAtExitForCommandLine(ex);
}
}
catch (const std::exception &ex)
{
printFatalErrorMessage(stderr, ex);
- std::exit(processExceptionAtExit(ex));
+ std::exit(processExceptionAtExitForCommandLine(ex));
}
}