X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/21f6e059a47df7875f1dacf26ca1eb854f4e887b..6cc7f1cf554d2780015c029522082e312ec21398:/src/smpi/mpi/smpi_request.cpp diff --git a/src/smpi/mpi/smpi_request.cpp b/src/smpi/mpi/smpi_request.cpp index a4785c81e0..57c1acab56 100644 --- a/src/smpi/mpi/smpi_request.cpp +++ b/src/smpi/mpi/smpi_request.cpp @@ -15,6 +15,7 @@ #include "smpi_datatype.hpp" #include "smpi_host.hpp" #include "smpi_op.hpp" +#include "src/kernel/EngineImpl.hpp" #include "src/kernel/activity/CommImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" #include "src/kernel/actor/SimcallObserver.hpp" @@ -33,7 +34,7 @@ static simgrid::config::Flag smpi_test_sleep( std::vector smpi_ois_values; -extern void (*smpi_comm_copy_data_callback)(simgrid::kernel::activity::CommImpl*, void*, size_t); +extern std::function smpi_comm_copy_data_callback; namespace simgrid{ namespace smpi{ @@ -620,8 +621,8 @@ void Request::start() size_t payload_size_ = size_ + 16;//MPI enveloppe size (tag+dest+communicator) kernel::actor::CommIsendSimcall observer{ - simgrid::kernel::actor::ActorImpl::by_pid(src_), mailbox->get_impl(), static_cast(payload_size_), -1, - static_cast(buf), real_size_, &match_send, + simgrid::kernel::EngineImpl::get_instance()->get_actor_by_pid(src_), mailbox->get_impl(), + static_cast(payload_size_), -1, static_cast(buf), real_size_, &match_send, &xbt_free_f, // how to free the userdata if a detached send fails process->replaying() ? &smpi_comm_null_copy_buffer_callback : smpi_comm_copy_data_callback, this, // detach if msg size < eager/rdv switch limit @@ -1092,9 +1093,8 @@ int Request::wait(MPI_Request * request, MPI_Status * status) // this is not a detached send kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self(); kernel::actor::ActivityWaitSimcall observer{issuer, (*request)->action_.get(), -1}; - kernel::actor::simcall_blocking( - [&observer] { observer.get_activity()->wait_for(observer.get_issuer(), observer.get_timeout()); }, - &observer); + kernel::actor::simcall_blocking([issuer, &observer] { observer.get_activity()->wait_for(issuer, -1); }, + &observer); } catch (const CancelException&) { XBT_VERB("Request cancelled"); }