X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/217557096673710f29ebe590ffcf76329ddd87de..578dd56a4a07709db1922ff5edd98f0c8f3090f9:/src/simix/popping.cpp diff --git a/src/simix/popping.cpp b/src/simix/popping.cpp index eef1ea8f72..e4a621b274 100644 --- a/src/simix/popping.cpp +++ b/src/simix/popping.cpp @@ -7,10 +7,16 @@ #include "smx_private.h" #include "xbt/fifo.h" #include "xbt/xbt_os_thread.h" -#ifdef HAVE_MC +#if HAVE_MC #include "src/mc/mc_private.h" #endif +#include "src/simix/SynchroExec.hpp" +#include "src/simix/SynchroComm.hpp" +#include "src/simix/SynchroSleep.hpp" +#include "src/simix/SynchroRaw.hpp" +#include "src/simix/SynchroIo.hpp" + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_popping, simix, "Popping part of SIMIX (transmuting from user request into kernel handlers)"); @@ -31,31 +37,39 @@ void SIMIX_simcall_answer(smx_simcall_t simcall) void SIMIX_simcall_exit(smx_synchro_t synchro) { - switch (synchro->type) { - - case SIMIX_SYNC_EXECUTE: - case SIMIX_SYNC_PARALLEL_EXECUTE: - SIMIX_post_host_execute(synchro); - break; - - case SIMIX_SYNC_COMMUNICATE: - SIMIX_post_comm(synchro); - break; + simgrid::simix::Exec *exec = dynamic_cast(synchro); + if (exec != nullptr) { + SIMIX_post_host_execute(synchro); + return; + } - case SIMIX_SYNC_SLEEP: - SIMIX_post_process_sleep(synchro); - break; + simgrid::simix::Comm *comm = dynamic_cast(synchro); + if (comm != nullptr) { + SIMIX_post_comm(synchro); + return; + } - case SIMIX_SYNC_JOIN: - SIMIX_post_process_sleep(synchro); - break; + simgrid::simix::Sleep *sleep = dynamic_cast(synchro); + if (sleep != nullptr) { + SIMIX_post_process_sleep(synchro); + return; + } - case SIMIX_SYNC_SYNCHRO: - SIMIX_post_synchro(synchro); - break; + simgrid::simix::Raw *raw = dynamic_cast(synchro); + if (raw != nullptr) { + SIMIX_post_synchro(synchro); + return; + } - case SIMIX_SYNC_IO: - SIMIX_post_io(synchro); - break; + simgrid::simix::Io *io = dynamic_cast(synchro); + if (io != nullptr) { + SIMIX_post_io(synchro); + return; } } + +void SIMIX_run_kernel(void* code) +{ + std::function* function = (std::function*) code; + (*function)(); +}