X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a900ac9d39fee1b3de240499c5326e5b8d4f44c2..01c398b5bded101a7bf96c2eea37cdd395a21c4d:/src/smpi/internals/smpi_global.cpp diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 99323b64c6..ebf13d8d52 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -382,6 +382,10 @@ static void smpi_init_options(){ else xbt_die("Invalid value for smpi/privatization: '%s'", smpi_privatize_option.c_str()); + if (not SMPI_switch_data_segment) { + XBT_DEBUG("Running without smpi_main(); disable smpi/privatization."); + smpi_privatize_global_variables = SmpiPrivStrategies::None; + } #if defined(__FreeBSD__) if (smpi_privatize_global_variables == SmpiPrivStrategies::Mmap) { XBT_INFO("mmap privatization is broken on FreeBSD, switching to dlopen privatization instead."); @@ -500,13 +504,13 @@ int smpi_main(const char* executable, int argc, char *argv[]) int fdout = open(target_executable.c_str(), O_CREAT | O_RDWR, S_IRWXU); xbt_assert(fdout >= 0, "Cannot write into %s", target_executable.c_str()); + XBT_DEBUG("Copy %ld bytes into %s", static_cast(fdin_size), target_executable.c_str()); #if HAVE_SENDFILE ssize_t sent_size = sendfile(fdout, fdin, NULL, fdin_size); xbt_assert(sent_size == fdin_size, "Error while copying %s: only %zd bytes copied instead of %ld (errno: %d -- %s)", target_executable.c_str(), sent_size, fdin_size, errno, strerror(errno)); #else - XBT_VERB("Copy %d bytes into %s", static_cast(fdin_size), target_executable.c_str()); const int bufsize = 1024 * 1024 * 4; char buf[bufsize]; while (int got = read(fdin, buf, bufsize)) { @@ -602,12 +606,12 @@ int smpi_main(const char* executable, int argc, char *argv[]) // Called either directly from the user code, or from the code called by smpirun void SMPI_init(){ - simgrid::s4u::Actor::onCreation.connect([](simgrid::s4u::ActorPtr actor) { - if (not actor->isDaemon()) { + simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::ActorPtr actor) { + if (not actor->is_daemon()) { process_data.insert({actor, new simgrid::smpi::Process(actor, nullptr)}); } }); - simgrid::s4u::Actor::onDestruction.connect([](simgrid::s4u::ActorPtr actor) { + simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::ActorPtr actor) { auto it = process_data.find(actor); if (it != process_data.end()) { delete it->second;