X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d656f9465e7b1c36319f86eeafdcec58fe9551a4..dd96d5146134f3ff468a7835db49556c8e6225a5:/src/smpi/mpi/smpi_keyvals.cpp diff --git a/src/smpi/mpi/smpi_keyvals.cpp b/src/smpi/mpi/smpi_keyvals.cpp index 9c1b90008e..35b82ffd11 100644 --- a/src/smpi/mpi/smpi_keyvals.cpp +++ b/src/smpi/mpi/smpi_keyvals.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2017. The SimGrid Team. +/* Copyright (c) 2007-2018. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -16,30 +16,30 @@ std::unordered_map* Keyval::attributes(){ template <> int Keyval::call_deleter(Comm* obj, smpi_key_elem elem, int keyval, void * value, int* flag){ - if(elem->delete_fn.comm_delete_fn!=MPI_NULL_DELETE_FN){ - int ret = elem->delete_fn.comm_delete_fn(obj, keyval, value, flag); - if(ret!=MPI_SUCCESS) - return ret; - } - return MPI_SUCCESS; + int ret = MPI_SUCCESS; + 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) + elem->delete_fn.comm_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret); + return ret; } template <> int Keyval::call_deleter(Win* obj, smpi_key_elem elem, int keyval, void * value, int* flag){ - if(elem->delete_fn.win_delete_fn!=MPI_NULL_DELETE_FN){ - int ret = elem->delete_fn.win_delete_fn(obj, keyval, value, flag); - if(ret!=MPI_SUCCESS) - return ret; - } - return MPI_SUCCESS; + int ret = MPI_SUCCESS; + 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) + elem->delete_fn.win_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret); + return ret; } template <> int Keyval::call_deleter(Datatype* obj, smpi_key_elem elem, int keyval, void * value, int* flag){ - if(elem->delete_fn.type_delete_fn!=MPI_NULL_DELETE_FN){ - int ret = elem->delete_fn.type_delete_fn(obj, keyval, value, flag); - if(ret!=MPI_SUCCESS) - return ret; - } - return MPI_SUCCESS; + int ret = MPI_SUCCESS; + 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) + elem->delete_fn.type_delete_fn_fort(obj, keyval, value, elem->extra_state, &ret); + return ret; } }