A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't compute the dependencies locally in the checker, but through the observers...
[simgrid.git]
/
src
/
mc
/
Session.cpp
diff --git
a/src/mc/Session.cpp
b/src/mc/Session.cpp
index f8d8819460d45ece9562f0adfaedc8064ea30e30..37a048762ba8d3f795a72a78b49273a8229b453f 100644
(file)
--- a/
src/mc/Session.cpp
+++ b/
src/mc/Session.cpp
@@
-1,4
+1,4
@@
-/* Copyright (c) 2015-202
0
. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2015-202
2
. 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. */
/* 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. */
@@
-9,12
+9,15
@@
#include "src/internal_config.h" // HAVE_SMPI
#if HAVE_SMPI
#include "smpi/smpi.h"
#include "src/internal_config.h" // HAVE_SMPI
#if HAVE_SMPI
#include "smpi/smpi.h"
+#include "src/smpi/include/private.hpp"
#endif
#include "src/mc/mc_private.hpp"
#include "src/mc/mc_state.hpp"
#include "xbt/log.h"
#include "xbt/system_error.hpp"
#endif
#include "src/mc/mc_private.hpp"
#include "src/mc/mc_state.hpp"
#include "xbt/log.h"
#include "xbt/system_error.hpp"
+#include "signal.h"
+#include <array>
#include <memory>
#include <string>
#include <memory>
#include <string>
@@
-68,8
+71,7
@@
Session::Session(const std::function<void()>& code)
// between the model-checker process (ourselves) and the model-checked
// process:
int sockets[2];
// between the model-checker process (ourselves) and the model-checked
// process:
int sockets[2];
- int res = socketpair(AF_LOCAL, SOCK_SEQPACKET | SOCK_CLOEXEC, 0, sockets);
- xbt_assert(res != -1, "Could not create socketpair");
+ xbt_assert(socketpair(AF_LOCAL, SOCK_SEQPACKET | SOCK_CLOEXEC, 0, sockets) != -1, "Could not create socketpair");
pid_t pid = fork();
xbt_assert(pid >= 0, "Could not fork model-checked process");
pid_t pid = fork();
xbt_assert(pid >= 0, "Could not fork model-checked process");
@@
-85,7
+87,7
@@
Session::Session(const std::function<void()>& code)
xbt_assert(mc_model_checker == nullptr, "Did you manage to start the MC twice in this process?");
xbt_assert(mc_model_checker == nullptr, "Did you manage to start the MC twice in this process?");
- auto process
= std::make_unique<simgrid::mc::RemoteSimulation
>(pid);
+ auto process
= std::make_unique<simgrid::mc::RemoteProcess
>(pid);
model_checker_ = std::make_unique<simgrid::mc::ModelChecker>(std::move(process), sockets[1]);
mc_model_checker = model_checker_.get();
model_checker_ = std::make_unique<simgrid::mc::ModelChecker>(std::move(process), sockets[1]);
mc_model_checker = model_checker_.get();
@@
-97,23
+99,24
@@
Session::~Session()
this->close();
}
this->close();
}
-/** T
ake the initial snapshot of the application, that
must be stopped. */
-void Session::
initialize
()
+/** T
he application
must be stopped. */
+void Session::
take_initial_snapshot
()
{
xbt_assert(initial_snapshot_ == nullptr);
model_checker_->wait_for_requests();
initial_snapshot_ = std::make_shared<simgrid::mc::Snapshot>(0);
}
{
xbt_assert(initial_snapshot_ == nullptr);
model_checker_->wait_for_requests();
initial_snapshot_ = std::make_shared<simgrid::mc::Snapshot>(0);
}
-
void
Session::execute(Transition const& transition) const
+
simgrid::mc::RemotePtr<simgrid::kernel::actor::SimcallObserver>
Session::execute(Transition const& transition) const
{
{
- model_checker_->handle_simcall(transition);
+
simgrid::mc::RemotePtr<simgrid::kernel::actor::SimcallObserver> res =
model_checker_->handle_simcall(transition);
model_checker_->wait_for_requests();
model_checker_->wait_for_requests();
+ return res;
}
void Session::restore_initial_state() const
{
}
void Session::restore_initial_state() const
{
- this->initial_snapshot_->restore(&model_checker_->get_remote_
simulation
());
+ this->initial_snapshot_->restore(&model_checker_->get_remote_
process
());
}
void Session::log_state() const
}
void Session::log_state() const
@@
-143,15
+146,17
@@
void Session::close()
bool Session::actor_is_enabled(aid_t pid) const
{
bool Session::actor_is_enabled(aid_t pid) const
{
- s_mc_message_actor_enabled_t msg{MC_MESSAGE_ACTOR_ENABLED, pid};
+ s_mc_message_actor_enabled_t msg;
+ memset(&msg, 0, sizeof msg);
+ msg.type = simgrid::mc::MessageType::ACTOR_ENABLED;
+ msg.aid = pid;
model_checker_->channel().send(msg);
model_checker_->channel().send(msg);
-
char buff[MC_MESSAGE_LENGTH]
;
- ssize_t received = model_checker_->channel().receive(buff
, MC_MESSAGE_LENGTH
, true);
+
std::array<char, MC_MESSAGE_LENGTH> buff
;
+ ssize_t received = model_checker_->channel().receive(buff
.data(), buff.size()
, true);
xbt_assert(received == sizeof(s_mc_message_int_t), "Unexpected size in answer to ACTOR_ENABLED");
xbt_assert(received == sizeof(s_mc_message_int_t), "Unexpected size in answer to ACTOR_ENABLED");
- return ((s_mc_message_int_t*)buff)->value;
+ return ((s_mc_message_int_t*)buff
.data()
)->value;
}
}
-simgrid::mc::Session* session;
-
+simgrid::mc::Session* session_singleton;
}
}
}
}