auto* base = event_base_new();
base_.reset(base);
- auto* socket_event = event_new(
+ socket_event_ = event_new(
base, get_channel().get_socket(), EV_READ | EV_PERSIST,
[](evutil_socket_t sig, short events, void* arg) {
auto checker = static_cast<simgrid::mc::CheckerSide*>(arg);
}
},
this);
- event_add(socket_event, nullptr);
- socket_event_.reset(socket_event);
+ event_add(socket_event_, nullptr);
- auto* signal_event = event_new(
+ signal_event_ = event_new(
base, SIGCHLD, EV_SIGNAL | EV_PERSIST,
[](evutil_socket_t sig, short events, void* arg) {
auto checker = static_cast<simgrid::mc::CheckerSide*>(arg);
}
},
this);
- event_add(signal_event, nullptr);
- signal_event_.reset(signal_event);
+ event_add(signal_event_, nullptr);
}
CheckerSide::CheckerSide(const std::vector<char*>& args, bool need_memory_introspection) : running_(true)
}
}
+CheckerSide::~CheckerSide()
+{
+ event_del(socket_event_);
+ event_free(socket_event_);
+ event_del(signal_event_);
+ event_free(signal_event_);
+}
+
void CheckerSide::dispatch_events() const
{
event_base_dispatch(base_.get());
/* CheckerSide: All what the checker needs to interact with a given application process */
class CheckerSide {
- void (*const free_event_fun)(event*) = [](event* evt) {
- event_del(evt);
- event_free(evt);
- };
- std::unique_ptr<event, decltype(&event_free)> socket_event_{nullptr, &event_free};
- std::unique_ptr<event, decltype(&event_free)> signal_event_{nullptr, &event_free};
+ event* socket_event_;
+ event* signal_event_;
std::unique_ptr<event_base, decltype(&event_base_free)> base_{nullptr, &event_base_free};
std::unique_ptr<RemoteProcessMemory> remote_memory_;
public:
explicit CheckerSide(const std::vector<char*>& args, bool need_memory_introspection);
+ ~CheckerSide();
// No copy:
CheckerSide(CheckerSide const&) = delete;