Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use std::unique_ptr and remove explicit destructor.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 24 Jun 2021 07:48:15 +0000 (09:48 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Thu, 24 Jun 2021 07:48:15 +0000 (09:48 +0200)
src/mc/remote/CheckerSide.cpp
src/mc/remote/CheckerSide.hpp

index ce1dfc8..086afec 100644 (file)
 namespace simgrid {
 namespace mc {
 
-CheckerSide::~CheckerSide()
-{
-  if (socket_event_ != nullptr)
-    event_free(socket_event_);
-  if (signal_event_ != nullptr)
-    event_free(signal_event_);
-  if (base_ != nullptr)
-    event_base_free(base_);
-}
-
 void CheckerSide::start(void (*handler)(int, short, void*), ModelChecker* mc)
 {
-  base_ = event_base_new();
+  auto* base = event_base_new();
+  base_.reset(base);
 
-  socket_event_ = event_new(base_, get_channel().get_socket(), EV_READ | EV_PERSIST, handler, mc);
-  event_add(socket_event_, nullptr);
+  auto* socket_event = event_new(base, get_channel().get_socket(), EV_READ | EV_PERSIST, handler, mc);
+  event_add(socket_event, nullptr);
+  socket_event_.reset(socket_event);
 
-  signal_event_ = event_new(base_, SIGCHLD, EV_SIGNAL | EV_PERSIST, handler, mc);
-  event_add(signal_event_, nullptr);
+  auto* signal_event = event_new(base, SIGCHLD, EV_SIGNAL | EV_PERSIST, handler, mc);
+  event_add(signal_event, nullptr);
+  signal_event_.reset(signal_event);
 }
 
 void CheckerSide::dispatch()
 {
-  event_base_dispatch(base_);
+  event_base_dispatch(base_.get());
 }
 
 void CheckerSide::break_loop()
 {
-  event_base_loopbreak(base_);
+  event_base_loopbreak(base_.get());
 }
 
 } // namespace mc
index ff844b5..a720a9c 100644 (file)
 
 #include <event2/event.h>
 #include <functional>
+#include <memory>
 
 namespace simgrid {
 namespace mc {
 
 class CheckerSide {
-  struct event_base* base_    = nullptr;
-  struct event* socket_event_ = nullptr;
-  struct event* signal_event_ = nullptr;
+  std::unique_ptr<event_base, decltype(&event_base_free)> base_{nullptr, &event_base_free};
+  std::unique_ptr<event, decltype(&event_free)> socket_event_{nullptr, &event_free};
+  std::unique_ptr<event, decltype(&event_free)> signal_event_{nullptr, &event_free};
 
   Channel channel_;
 
 public:
   explicit CheckerSide(int sockfd) : channel_(sockfd) {}
-  ~CheckerSide();
 
   // No copy:
   CheckerSide(CheckerSide const&) = delete;