X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d2cb7a4992b0f91be3b97edc041bfc194df22515..1cfb920ff29e1da07dd7a038c1250de514da9a00:/src/smpi/mpi/smpi_keyvals.cpp diff --git a/src/smpi/mpi/smpi_keyvals.cpp b/src/smpi/mpi/smpi_keyvals.cpp index b1c61a3c1f..e60a2b28be 100644 --- a/src/smpi/mpi/smpi_keyvals.cpp +++ b/src/smpi/mpi/smpi_keyvals.cpp @@ -9,9 +9,17 @@ namespace simgrid::smpi { +#define CHECK_OWNER(aid) \ + if (not s4u::Actor::by_pid(aid)) { \ + XBT_CWARN(smpi, "Actor #%ld not found. Skip delete callback.", aid); \ + return ret; \ + } else \ + (void)0 + template <> int Keyval::call_deleter(Comm* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/) { int ret = MPI_SUCCESS; + CHECK_OWNER(elem.actor_id); if (elem.delete_fn.comm_delete_fn != MPI_NULL_DELETE_FN) ret = elem.delete_fn.comm_delete_fn(obj, keyval, value, elem.extra_state); else if (elem.delete_fn.comm_delete_fn_fort != MPI_NULL_DELETE_FN) @@ -24,6 +32,7 @@ template <> int Keyval::call_deleter(Comm* obj, const smpi_key_elem& elem, template <> int Keyval::call_deleter(Win* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/) { int ret = MPI_SUCCESS; + CHECK_OWNER(elem.actor_id); if (elem.delete_fn.win_delete_fn != MPI_NULL_DELETE_FN) ret = elem.delete_fn.win_delete_fn(obj, keyval, value, elem.extra_state); else if (elem.delete_fn.win_delete_fn_fort != MPI_NULL_DELETE_FN) @@ -37,6 +46,7 @@ template <> int Keyval::call_deleter(Datatype* obj, const smpi_key_elem& elem, int keyval, void* value, int* /*flag*/) { int ret = MPI_SUCCESS; + CHECK_OWNER(elem.actor_id); if (elem.delete_fn.type_delete_fn != MPI_NULL_DELETE_FN) ret = elem.delete_fn.type_delete_fn(obj, keyval, value, elem.extra_state); else if (elem.delete_fn.type_delete_fn_fort != MPI_NULL_DELETE_FN)