X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b026ccb35d517964a3c60f31cf2297b5c75b4c0..7f671da878195261904d4bbc180a697902799dad:/src/smpi/mpi/smpi_comm.cpp diff --git a/src/smpi/mpi/smpi_comm.cpp b/src/smpi/mpi/smpi_comm.cpp index 84ffe79555..829cf51b1f 100644 --- a/src/smpi/mpi/smpi_comm.cpp +++ b/src/smpi/mpi/smpi_comm.cpp @@ -79,33 +79,29 @@ int Comm::dup(MPI_Comm* newcomm){ (*newcomm) = new Comm(cp, this->topo()); int ret = MPI_SUCCESS; - if (not attributes()->empty()) { - int flag=0; - void* value_out=nullptr; - for (auto const& it : *attributes()) { - smpi_key_elem elem = keyvals_.at(it.first); - if (elem != nullptr){ - if( elem->copy_fn.comm_copy_fn != MPI_NULL_COPY_FN && - elem->copy_fn.comm_copy_fn != MPI_COMM_DUP_FN) - ret = elem->copy_fn.comm_copy_fn(this, it.first, elem->extra_state, it.second, &value_out, &flag); - else if ( elem->copy_fn.comm_copy_fn_fort != MPI_NULL_COPY_FN && - *(int*)*elem->copy_fn.comm_copy_fn_fort != 1){ - value_out=(int*)xbt_malloc(sizeof(int)); - elem->copy_fn.comm_copy_fn_fort(this, it.first, elem->extra_state, it.second, value_out, &flag,&ret); - } - if (ret != MPI_SUCCESS) { - Comm::destroy(*newcomm); - *newcomm = MPI_COMM_NULL; - return ret; - } - if (elem->copy_fn.comm_copy_fn == MPI_COMM_DUP_FN || - ((elem->copy_fn.comm_copy_fn_fort != MPI_NULL_COPY_FN) && *(int*)*elem->copy_fn.comm_copy_fn_fort == 1)){ - elem->refcount++; - (*newcomm)->attributes()->insert({it.first, it.second}); - }else if (flag){ - elem->refcount++; - (*newcomm)->attributes()->insert({it.first, value_out}); - } + for (auto const& it : attributes()) { + smpi_key_elem elem = keyvals_.at(it.first); + if (elem != nullptr) { + int flag = 0; + void* value_out = nullptr; + if (elem->copy_fn.comm_copy_fn != MPI_NULL_COPY_FN && elem->copy_fn.comm_copy_fn != MPI_COMM_DUP_FN) + ret = elem->copy_fn.comm_copy_fn(this, it.first, elem->extra_state, it.second, &value_out, &flag); + else if (elem->copy_fn.comm_copy_fn_fort != MPI_NULL_COPY_FN && *(int*)*elem->copy_fn.comm_copy_fn_fort != 1) { + value_out = (int*)xbt_malloc(sizeof(int)); + elem->copy_fn.comm_copy_fn_fort(this, it.first, elem->extra_state, it.second, value_out, &flag, &ret); + } + if (ret != MPI_SUCCESS) { + Comm::destroy(*newcomm); + *newcomm = MPI_COMM_NULL; + return ret; + } + if (elem->copy_fn.comm_copy_fn == MPI_COMM_DUP_FN || + ((elem->copy_fn.comm_copy_fn_fort != MPI_NULL_COPY_FN) && *(int*)*elem->copy_fn.comm_copy_fn_fort == 1)) { + elem->refcount++; + (*newcomm)->attributes().emplace(it.first, it.second); + } else if (flag) { + elem->refcount++; + (*newcomm)->attributes().emplace(it.first, value_out); } } }