-/* Copyright (c) 2015-2016. The SimGrid Team.
+/* Copyright (c) 2015-2019. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include <csignal>
#include <fcntl.h>
-#include <signal.h>
#include <functional>
-#include <xbt/log.h>
-#include <xbt/system_error.hpp>
-#include <simgrid/sg_config.h>
-#include <simgrid/modelchecker.h>
+#include "xbt/log.h"
+#include "xbt/system_error.hpp"
#include <mc/mc.h>
+#include <simgrid/modelchecker.h>
+#include <simgrid/sg_config.hpp>
#include "src/mc/Session.hpp"
-#include "src/mc/mc_state.h"
-#include "src/mc/mc_private.h"
#include "src/mc/checker/Checker.hpp"
+#include "src/mc/mc_private.hpp"
+#include "src/mc/mc_state.hpp"
+
+#include "src/smpi/include/private.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_Session, mc, "Model-checker session");
Session::Session(pid_t pid, int socket)
{
- std::unique_ptr<simgrid::mc::Process> process(new simgrid::mc::Process(pid, socket));
+ std::unique_ptr<simgrid::mc::RemoteClient> process(new simgrid::mc::RemoteClient(pid, socket));
+#if HAVE_SMPI
// TODO, automatic detection of the config from the process
- process->privatized(smpi_privatize_global_variables != SMPI_PRIVATIZE_NONE);
+ process->privatized(smpi_privatize_global_variables != SmpiPrivStrategies::NONE);
+#else
+ process->privatized(false);
+#endif
modelChecker_ = std::unique_ptr<ModelChecker>(
new simgrid::mc::ModelChecker(std::move(process)));
xbt_assert(mc_model_checker == nullptr);
{
mc_model_checker->getChecker()->logState();
- if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0')) {
+ if (not _sg_mc_dot_output_file.get().empty()) {
fprintf(dot_output, "}\n");
fclose(dot_output);
}
}
// static
-Session* Session::fork(std::function<void(void)> code)
+Session* Session::fork(std::function<void()> code)
{
// Create a AF_LOCAL socketpair used for exchanging messages
- // bewteen the model-checker process (ourselves) and the model-checked
+ // between the model-checker process (ourselves) and the model-checked
// process:
int res;
int sockets[2];
- res = socketpair(AF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0, sockets);
+ res = socketpair(AF_LOCAL, SOCK_SEQPACKET | SOCK_CLOEXEC, 0, sockets);
if (res == -1)
throw simgrid::xbt::errno_error("Could not create socketpair");