From: Timo Heister Date: Sun, 6 Feb 2011 15:57:49 +0000 (+0000) Subject: Avoid deadlock in Utilities:MPI_InitFinalize when an exception is being thrown. X-Git-Tag: v8.0.0~4402 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=140d07cd62899dd6ad35ada0303bc8916ceff410;p=dealii.git Avoid deadlock in Utilities:MPI_InitFinalize when an exception is being thrown. git-svn-id: https://svn.dealii.org/trunk@23295 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/source/base/utilities.cc b/deal.II/source/base/utilities.cc index 4af1ce1fc4..e96654b336 100644 --- a/deal.II/source/base/utilities.cc +++ b/deal.II/source/base/utilities.cc @@ -809,7 +809,18 @@ namespace Utilities MPI_Initialized(&MPI_has_been_started); if (program_uses_mpi() == true && owns_mpi == true && MPI_has_been_started != 0) - mpi_err = MPI_Finalize(); + { + if (std::uncaught_exception()) + { + std::cerr << "ERROR: Uncaught exception in MPI_InitFinalize on proc " + << get_this_mpi_process(MPI_COMM_WORLD) + << ". Skipping MPI_Finalize() to avoid a deadlock." + << std::endl; + } + else + mpi_err = MPI_Finalize(); + } + AssertThrow (mpi_err == 0, ExcMessage ("An error occurred while calling MPI_Finalize()"));