X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/50753d5f8442a47c17c4035724201a18a7ff6146..6a908b79ea45f85f305620c09375b72483b7eee9:/src/mc/remote/CheckerSide.hpp?ds=sidebyside diff --git a/src/mc/remote/CheckerSide.hpp b/src/mc/remote/CheckerSide.hpp index 17fb33c3c4..a3cb6a6eda 100644 --- a/src/mc/remote/CheckerSide.hpp +++ b/src/mc/remote/CheckerSide.hpp @@ -26,12 +26,17 @@ class CheckerSide { Channel channel_; bool running_ = false; pid_t pid_; + // When forking (no meminfo), the real app is our grandchild. In this case, + // child_checker_ is a CheckerSide to our child that can waitpid our grandchild on our behalf + CheckerSide* child_checker_ = nullptr; - void setup_events(); // Part of the initialization + void setup_events(bool socket_only); // Part of the initialization void clear_memory_cache(); - void handle_waitpid(); + void handle_dead_child(int status); // Launched when the dying child is the PID we follow + void handle_waitpid(); // Launched when receiving a sigchild public: + explicit CheckerSide(int socket, CheckerSide* child_checker); explicit CheckerSide(const std::vector& args, bool need_memory_introspection); ~CheckerSide(); @@ -49,6 +54,9 @@ public: void break_loop() const; void wait_for_requests(); + /* Create a new CheckerSide by forking the currently existing one, and connect it through the master_socket */ + std::unique_ptr clone(int master_socket); + /** Ask the application to run post-mortem analysis, and maybe to stop ASAP */ void finalize(bool terminate_asap = false);