- // 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 = smpi_process()->index();
- TRACE_smpi_init(rank);
- TRACE_smpi_computing_init(rank);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_INIT;
- TRACE_smpi_collective_in(rank, __FUNCTION__, extra);
- TRACE_smpi_collective_out(rank, __FUNCTION__);
- 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;