- // PMPI_Init is called only once per SMPI process
- int already_init;
- MPI_Initialized(&already_init);
- if(already_init == 0){
- simgrid::smpi::Process::init(argc, argv);
- smpi_process()->mark_as_initialized();
- int rank = simgrid::s4u::this_actor::get_pid();
- TRACE_smpi_init(rank);
- TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::NoOpTIData("init"));
- TRACE_smpi_comm_out(rank);
- TRACE_smpi_computing_init(rank);
- TRACE_smpi_sleeping_init(rank);
- smpi_bench_begin();
+
+ if(smpi_process()->initializing()){
+ XBT_WARN("SMPI is already initializing - MPI_Init called twice ?");
+ return MPI_ERR_OTHER;
+ }
+ if(smpi_process()->initialized()){
+ XBT_WARN("SMPI already initialized once - MPI_Init called twice ?");
+ return MPI_ERR_OTHER;
+ }
+ if(smpi_process()->finalized()){
+ XBT_WARN("SMPI already finalized");
+ return MPI_ERR_OTHER;