diff --git a/src/utils/PTScotchPartitioner.cpp b/src/utils/PTScotchPartitioner.cpp index e86acfa4494c437dfbe8886a83d6ecbf01f514f2..112ddfecdf161d8b924b6f9b962d16e75c22c507 100644 --- a/src/utils/PTScotchPartitioner.cpp +++ b/src/utils/PTScotchPartitioner.cpp @@ -90,7 +90,9 @@ PTScotchPartitioner::partition(const CRSGraph& graph) SCOTCH_stratExit(&scotch_strategy); } - MPI_Comm_free(&partitioning_comm); + if (partitioning_comm != MPI_COMM_NULL){ + MPI_Comm_free(&partitioning_comm); + } MPI_Group_free(&mesh_group); MPI_Group_free(&world_group); diff --git a/src/utils/ParMETISPartitioner.cpp b/src/utils/ParMETISPartitioner.cpp index d67e38d1ba96a6ee6aac7e283d8bde6278971189..5a7bdb6a27d1ce459d19a4cfac38c2cca2166d64 100644 --- a/src/utils/ParMETISPartitioner.cpp +++ b/src/utils/ParMETISPartitioner.cpp @@ -87,7 +87,9 @@ ParMETISPartitioner::partition(const CRSGraph& graph) // LCOV_EXCL_STOP } - MPI_Comm_free(&partitioning_comm); + if (partitioning_comm != MPI_COMM_NULL){ + MPI_Comm_free(&partitioning_comm); + } MPI_Group_free(&mesh_group); MPI_Group_free(&world_group); diff --git a/src/utils/Stop.cpp b/src/utils/Stop.cpp index 593094cc311a8d1d72ed687d9a90d3af65f1c881..fb2755c7d4a52fa04b0cdce0096793a990994e49 100644 --- a/src/utils/Stop.cpp +++ b/src/utils/Stop.cpp @@ -9,6 +9,41 @@ #ifdef PUGS_HAS_SLURM #include <slurm/slurm.h> + +// LCOV_EXCL_START +class SlurmWrapper +{ + private: + int m_slurm_job_id = -1; + + public: + bool + mustStop() const + { + if (m_slurm_job_id == -1) { + return false; + + } else { + return slurm_get_rem_time(m_slurm_job_id) < 150; + } + } + + SlurmWrapper() + { + char* env = getenv("SLURM_JOB_ID"); + if (env != nullptr) { + slurm_init(nullptr); + m_slurm_job_id = std::atoi(env); + } + } + + ~SlurmWrapper() + { + slurm_fini(); + } +}; +// LCOV_EXCL_STOP + #endif // PUGS_HAS_SLURM bool @@ -31,16 +66,9 @@ stop() #ifdef PUGS_HAS_SLURM // LCOV_EXCL_START - char* env = getenv("SLURM_JOB_ID"); - if (env != nullptr) { - slurm_init(nullptr); - int slurm_job_id = std::atoi(env); - - if (slurm_get_rem_time(slurm_job_id) < 150) { - stop = true; - } - - slurm_fini(); + static SlurmWrapper slurm_wrapper; + if (slurm_wrapper.mustStop()) { + stop = true; } // LCOV_EXCL_STOP #endif // PUGS_HAS_SLURM