diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index 75f561b754c8ac7bf1ce98cb450f93ea148617a0..c35c1e84b922db7f5b8a933590d0dad1bfbaf238 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -185,7 +185,10 @@ void Msg::Exit(int level)
 #if defined(HAVE_MPI)
     // force general abort (wven if the fatal error occurred on 1 cpu only)
     MPI_Abort(MPI_COMM_WORLD, level);
-    MPI_Finalize();
+    int finalized;
+    MPI_Finalized(&finalized);
+    if (!finalized)
+      MPI_Finalize();
 #endif
     FinalizeOnelab();
     exit(level);
@@ -215,7 +218,10 @@ void Msg::Exit(int level)
   PetscFinalize();
 #endif
 #if defined(HAVE_MPI)
-  MPI_Finalize();
+  int finalized; //Some PETSc versions call MPI_FINALIZE
+  MPI_Finalized(&finalized);
+  if (!finalized)
+    MPI_Finalize();
 #endif
   FinalizeOnelab();
   exit(_atLeastOneErrorInRun);