Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid into no_simix_global
[simgrid.git] / src / mc / remote / CheckerSide.cpp
1 /* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #include "src/mc/remote/CheckerSide.hpp"
7 #include <csignal>
8 #include <sys/wait.h>
9
10 namespace simgrid {
11 namespace mc {
12
13 void CheckerSide::start(void (*handler)(int, short, void*), ModelChecker* mc)
14 {
15   auto* base = event_base_new();
16   base_.reset(base);
17
18   auto* socket_event = event_new(base, get_channel().get_socket(), EV_READ | EV_PERSIST, handler, mc);
19   event_add(socket_event, nullptr);
20   socket_event_.reset(socket_event);
21
22   auto* signal_event = event_new(base, SIGCHLD, EV_SIGNAL | EV_PERSIST, handler, mc);
23   event_add(signal_event, nullptr);
24   signal_event_.reset(signal_event);
25 }
26
27 void CheckerSide::dispatch() const
28 {
29   event_base_dispatch(base_.get());
30 }
31
32 void CheckerSide::break_loop() const
33 {
34   event_base_loopbreak(base_.get());
35 }
36
37 } // namespace mc
38 } // namespace simgrid