Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Move Server in simgrid::mc
authorGabriel Corona <gabriel.corona@loria.fr>
Tue, 10 Nov 2015 14:27:35 +0000 (15:27 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Tue, 10 Nov 2015 14:27:35 +0000 (15:27 +0100)
src/mc/Process.cpp
src/mc/Server.cpp [moved from src/mc/mc_server.cpp with 92% similarity]
src/mc/Server.hpp [moved from src/mc/mc_server.h with 74% similarity]
src/mc/mc_base.cpp
src/mc/mc_global.cpp
src/mc/simgrid_mc.cpp
src/xbt/log.c
tools/cmake/DefinePackages.cmake

index 3919f99..f775ba4 100644 (file)
@@ -32,8 +32,8 @@
 #include "mc_snapshot.h"
 #include "mc_ignore.h"
 #include "mc_smx.h"
-#include "mc_server.h"
 
+#include "src/mc/Server.hpp"
 #include "src/mc/Process.hpp"
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/ObjectInformation.hpp"
similarity index 92%
rename from src/mc/mc_server.cpp
rename to src/mc/Server.cpp
index db325d2..6d2e316 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "ModelChecker.hpp"
 #include "mc_protocol.h"
-#include "mc_server.h"
+#include "src/mc/Server.hpp"
 #include "mc_private.h"
 #include "mc_ignore.h"
 #include "mcer_ignore.h"
@@ -31,18 +31,23 @@ using simgrid::mc::remote;
 
 extern "C" {
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_server, mc, "MC server logic");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_Server, mc, "MC server logic");
+
+}
 
 // HArdcoded index for now:
 #define SOCKET_FD_INDEX 0
 #define SIGNAL_FD_INDEX 1
 
-mc_server_t mc_server;
+namespace simgrid {
+namespace mc {
 
-s_mc_server::s_mc_server(pid_t pid_, int socket_)
+Server* server = nullptr;
+
+Server::Server(pid_t pid_, int socket_)
   : pid(pid_), socket(socket_) {}
 
-void s_mc_server::start()
+void Server::start()
 {
   // Block SIGCHLD (this will be handled with accept/signalfd):
   sigset_t set;
@@ -85,7 +90,7 @@ void s_mc_server::start()
   ptrace(PTRACE_CONT, pid, 0, 0);
 }
 
-void s_mc_server::shutdown()
+void Server::shutdown()
 {
   XBT_DEBUG("Shuting down model-checker");
 
@@ -101,7 +106,7 @@ void s_mc_server::shutdown()
   }
 }
 
-void s_mc_server::exit()
+void Server::exit()
 {
   // Finished:
   int status = mc_model_checker->process().status();
@@ -117,7 +122,7 @@ void s_mc_server::exit()
   }
 }
 
-void s_mc_server::resume(simgrid::mc::Process& process)
+void Server::resume(simgrid::mc::Process& process)
 {
   int res = process.send_message(MC_MESSAGE_CONTINUE);
   if (res)
@@ -135,7 +140,7 @@ void throw_socket_error(int fd)
   throw std::system_error(error, std::system_category());
 }
 
-bool s_mc_server::handle_message(char* buffer, ssize_t size)
+bool Server::handle_message(char* buffer, ssize_t size)
 {
   s_mc_message_t base_message;
   if (size < (ssize_t) sizeof(base_message))
@@ -229,7 +234,7 @@ bool s_mc_server::handle_message(char* buffer, ssize_t size)
   return true;
 }
 
-bool s_mc_server::handle_events()
+bool Server::handle_events()
 {
   char buffer[MC_MESSAGE_LENGTH];
   struct pollfd* socket_pollfd = &fds[SOCKET_FD_INDEX];
@@ -273,13 +278,13 @@ bool s_mc_server::handle_events()
   return true;
 }
 
-void s_mc_server::loop()
+void Server::loop()
 {
   while (mc_model_checker->process().running())
     this->handle_events();
 }
 
-void s_mc_server::handle_signals()
+void Server::handle_signals()
 {
   struct signalfd_siginfo info;
   struct pollfd* signalfd_pollfd = &fds[SIGNAL_FD_INDEX];
@@ -299,7 +304,7 @@ void s_mc_server::handle_signals()
   this->on_signal(&info);
 }
 
-void s_mc_server::handle_waitpid()
+void Server::handle_waitpid()
 {
   XBT_DEBUG("Check for wait event");
   int status;
@@ -345,7 +350,7 @@ void s_mc_server::handle_waitpid()
   }
 }
 
-void s_mc_server::on_signal(const struct signalfd_siginfo* info)
+void Server::on_signal(const struct signalfd_siginfo* info)
 {
   switch(info->ssi_signo) {
   case SIGCHLD:
@@ -356,16 +361,16 @@ void s_mc_server::on_signal(const struct signalfd_siginfo* info)
   }
 }
 
-void s_mc_server::wait_client(simgrid::mc::Process& process)
+void Server::wait_client(simgrid::mc::Process& process)
 {
   this->resume(process);
   while (mc_model_checker->process().running()) {
-    if (!mc_server->handle_events())
+    if (!simgrid::mc::server->handle_events())
       return;
   }
 }
 
-void s_mc_server::simcall_handle(simgrid::mc::Process& process, unsigned long pid, int value)
+void Server::simcall_handle(simgrid::mc::Process& process, unsigned long pid, int value)
 {
   s_mc_simcall_handle_message m;
   memset(&m, 0, sizeof(m));
@@ -375,9 +380,10 @@ void s_mc_server::simcall_handle(simgrid::mc::Process& process, unsigned long pi
   process.send_message(m);
   process.cache_flags = (mc_process_cache_flags_t) 0;
   while (process.running()) {
-    if (!mc_server->handle_events())
+    if (!simgrid::mc::server->handle_events())
       return;
   }
 }
 
 }
+}
similarity index 74%
rename from src/mc/mc_server.h
rename to src/mc/Server.hpp
index 9daf0dd..1c82e5a 100644 (file)
@@ -4,13 +4,11 @@
 /* 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. */
 
-#ifndef SIMGRID_MC_SERVER_H
-#define SIMGRID_MC_SERVER_H
+#ifndef SIMGRID_MC_SERVER_HPP
+#define SIMGRID_MC_SERVER_HPP
 
 #include <poll.h>
 
-#include <stdbool.h>
-
 #include <sys/signalfd.h>
 #include <sys/types.h>
 
 #include "src/mc/Process.hpp"
 #include "mc_exit.h"
 
-SG_BEGIN_DECL()
-
-#define MC_SERVER_ERROR SIMGRID_ERROR
-
-typedef struct s_mc_server s_mc_server_t, *mc_server_t;
-
-extern mc_server_t mc_server;
+namespace simgrid {
+namespace mc {
 
-SG_END_DECL()
-
-#ifdef __cplusplus
-
-struct s_mc_server {
+class Server {
 private:
   pid_t pid;
   int socket;
   struct pollfd fds[2];
 public:
-  s_mc_server(pid_t pid, int socket);
+  Server(pid_t pid, int socket);
   void start();
   void shutdown();
   void exit();
@@ -54,6 +43,9 @@ private:
   void on_signal(const struct signalfd_siginfo* info);
 };
 
-#endif
+extern Server* server;
+
+}
+}
 
 #endif
index 3ca646c..294ef16 100644 (file)
@@ -18,8 +18,8 @@
 #ifdef HAVE_MC
 #include "src/mc/Process.hpp"
 #include "src/mc/ModelChecker.hpp"
+#include "src/mc/Server.hpp"
 #include "mc_smx.h"
-#include "mc_server.h"
 #endif
 
 #ifdef HAVE_MC
@@ -43,7 +43,7 @@ void MC_wait_for_requests(void)
 {
 #ifdef HAVE_MC
   if (mc_mode == MC_MODE_SERVER) {
-    mc_server->wait_client(mc_model_checker->process());
+    simgrid::mc::server->wait_client(mc_model_checker->process());
     return;
   }
 #endif
@@ -233,7 +233,7 @@ void MC_simcall_handle(smx_simcall_t req, int value)
 
   xbt_dynar_foreach_ptr(mc_model_checker->process().smx_process_infos, i, pi) {
     if (req == &pi->copy.simcall) {
-      mc_server->simcall_handle(
+      simgrid::mc::server->simcall_handle(
         mc_model_checker->process(), pi->copy.pid, value);
       return;
     }
index 68675a9..a3b0921 100644 (file)
@@ -28,7 +28,7 @@
 #include "mc_record.h"
 
 #ifdef HAVE_MC
-#include "mc_server.h"
+#include "src/mc/Server.hpp"
 #include <libunwind.h>
 #include <xbt/mmalloc.h>
 #include "../xbt/mmalloc/mmprivate.h"
index 93cf397..a8b2884 100644 (file)
@@ -32,7 +32,7 @@
 #include "mc_base.h"
 #include "mc_private.h"
 #include "mc_protocol.h"
-#include "mc_server.h"
+#include "src/mc/Server.hpp"
 #include "mc_safety.h"
 #include "mc_comm_pattern.h"
 #include "mc_liveness.h"
@@ -47,7 +47,7 @@ static int do_child(int socket, char** argv)
   // Make sure we do not outlive our parent:
   if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0) {
     std::perror("simgrid-mc");
-    return MC_SERVER_ERROR;
+    return SIMGRID_ERROR;
   }
 #endif
 
@@ -57,11 +57,11 @@ static int do_child(int socket, char** argv)
   int fdflags = fcntl(socket, F_GETFD, 0);
   if (fdflags == -1) {
     std::perror("simgrid-mc");
-    return MC_SERVER_ERROR;
+    return SIMGRID_ERROR;
   }
   if (fcntl(socket, F_SETFD, fdflags & ~FD_CLOEXEC) == -1) {
     std::perror("simgrid-mc");
-    return MC_SERVER_ERROR;
+    return SIMGRID_ERROR;
   }
 
   XBT_DEBUG("CLOEXEC removed on socket %i", socket);
@@ -77,36 +77,36 @@ static int do_child(int socket, char** argv)
   char buffer[64];
   res = std::snprintf(buffer, sizeof(buffer), "%i", socket);
   if ((size_t) res >= sizeof(buffer) || res == -1)
-    return MC_SERVER_ERROR;
+    return SIMGRID_ERROR;
   setenv(MC_ENV_SOCKET_FD, buffer, 1);
 
   execvp(argv[1], argv+1);
   XBT_ERROR("Could not execute the child process");
-  return MC_SERVER_ERROR;
+  return SIMGRID_ERROR;
 }
 
 static int do_parent(int socket, pid_t child)
 {
   XBT_DEBUG("Inside the parent process");
-  if (mc_server)
+  if (simgrid::mc::server)
     xbt_die("MC server already present");
   try {
     mc_mode = MC_MODE_SERVER;
-    mc_server = new s_mc_server(child, socket);
-    mc_server->start();
+    simgrid::mc::server = new simgrid::mc::Server(child, socket);
+    simgrid::mc::server->start();
     if (_sg_mc_comms_determinism || _sg_mc_send_determinism)
       MC_modelcheck_comm_determinism();
     else if (!_sg_mc_property_file || _sg_mc_property_file[0] == '\0')
       MC_modelcheck_safety();
     else
       MC_modelcheck_liveness();
-    mc_server->shutdown();
-    mc_server->exit();
+    simgrid::mc::server->shutdown();
+    simgrid::mc::server->exit();
   }
   catch(std::exception& e) {
     XBT_ERROR("Exception: %s", e.what());
   }
-  exit(MC_SERVER_ERROR);
+  exit(SIMGRID_ERROR);
 }
 
 static char** argvdup(int argc, char** argv)
@@ -138,7 +138,7 @@ int main(int argc, char** argv)
   res = socketpair(AF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0, sockets);
   if (res == -1) {
     perror("simgrid-mc");
-    return MC_SERVER_ERROR;
+    return SIMGRID_ERROR;
   }
 
   XBT_DEBUG("Created socketpair");
@@ -146,7 +146,7 @@ int main(int argc, char** argv)
   pid_t pid = fork();
   if (pid < 0) {
     perror("simgrid-mc");
-    return MC_SERVER_ERROR;
+    return SIMGRID_ERROR;
   } else if (pid == 0) {
     close(sockets[1]);
     int res = do_child(sockets[0], argv);
index 8cb2f84..9a506a0 100644 (file)
@@ -654,7 +654,7 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(mc_process);
   XBT_LOG_CONNECT(mc_protocol);
   XBT_LOG_CONNECT(mc_RegionSnaphot);
-  XBT_LOG_CONNECT(mc_server);
+  XBT_LOG_CONNECT(mc_Server);
   XBT_LOG_CONNECT(mc_state);
 #endif
   XBT_LOG_CONNECT(mc_global);
index 6f50c77..698958c 100644 (file)
@@ -683,8 +683,8 @@ set(MC_SRC
   src/mc/mc_client.h
   src/mc/mc_protocol.h
   src/mc/mc_protocol.cpp
-  src/mc/mc_server.cpp
-  src/mc/mc_server.h
+  src/mc/Server.cpp
+  src/mc/Server.hpp
   src/mc/mc_smx.h
   src/mc/mc_smx.cpp
   src/mc/mc_xbt.hpp