Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
The creation of the pimpl needs no simcall
[simgrid.git] / src / mc / Session.hpp
index 9b7d857..508f65a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016. The SimGrid Team.
+/* Copyright (c) 2016-2019. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
 #include <sys/prctl.h>
 #endif
 
-#include <sys/types.h>
+#include "xbt/sysdep.h"
+#include "xbt/system_error.hpp"
 #include <sys/socket.h>
-#include <xbt/sysdep.h>
-#include <xbt/system_error.hpp>
+#include <sys/types.h>
 
 #include <functional>
 
-#include <xbt/log.h>
+#include "xbt/log.h"
 
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/ModelChecker.hpp"
@@ -37,8 +37,8 @@ namespace mc {
 class Session {
 private:
   std::unique_ptr<ModelChecker> modelChecker_;
+  std::shared_ptr<simgrid::mc::Snapshot> initialSnapshot_;
 
-private:
   Session(pid_t pid, int socket);
 
   // No copy:
@@ -49,19 +49,36 @@ public:
   ~Session();
   void close();
 
-public: // static constructors
+  void initialize();
+  void execute(Transition const& transition);
+  void logState();
+
+  void restoreInitialState();
+
+  // static constructors
 
   /** Create a new session by forking
+   *
+   *  This sets up the environment for the model-checked process
+   *  (environoment variables, sockets, etc.).
    *
    *  The code is expected to `exec` the model-checker program.
    */
-  static Session* fork(std::function<void(void)> code);
+  static Session* fork(std::function<void()> code);
 
-  /** Create a session using `execv` */
+  /** Spawn a model-checked process
+   *
+   *  @param path full path of the executable
+   *  @param argv arguments for the model-checked process (NULL-terminated)
+   */
   static Session* spawnv(const char *path, char *const argv[]);
 
-  /** Create a session using `execvp` */
-  static Session* spawnvp(const char *path, char *const argv[]);
+  /** Spawn a model-checked process (using PATH)
+   *
+   *  @param file file name of the executable (found using `PATH`)
+   *  @param argv arguments for the model-checked process (NULL-terminated)
+   */
+  static Session* spawnvp(const char *file, char *const argv[]);
 };
 
 // Temporary