Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make SwappedContext::parmap_ a std::unique_ptr.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 8 Mar 2019 14:47:58 +0000 (15:47 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sun, 10 Mar 2019 13:24:29 +0000 (14:24 +0100)
src/kernel/context/ContextSwapped.cpp
src/kernel/context/ContextSwapped.hpp

index 2fd0f47..0b59cd8 100644 (file)
@@ -43,10 +43,6 @@ SwappedContextFactory::SwappedContextFactory() : ContextFactory(), parallel_(SIM
   parmap_ = nullptr; // will be created lazily with the right parameters if needed (ie, in parallel)
   workers_context_.resize(parallel_ ? SIMIX_context_get_nthreads() : 1, nullptr);
 }
-SwappedContextFactory::~SwappedContextFactory()
-{
-  delete parmap_;
-}
 
 SwappedContext::SwappedContext(std::function<void()>&& code, smx_actor_t actor, SwappedContextFactory* factory)
     : Context(std::move(code), actor), factory_(factory)
@@ -164,7 +160,8 @@ void SwappedContextFactory::run_all()
 
     // We lazily create the parmap so that all options are actually processed when doing so.
     if (parmap_ == nullptr)
-      parmap_ = new simgrid::xbt::Parmap<smx_actor_t>(SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode());
+      parmap_.reset(
+          new simgrid::xbt::Parmap<smx_actor_t>(SIMIX_context_get_nthreads(), SIMIX_context_get_parallel_mode()));
 
     // Usually, Parmap::apply() executes the provided function on all elements of the array.
     // Here, the executed function does not return the control to the parmap before all the array is processed:
index 9e8796d..ad888cd 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "src/kernel/context/Context.hpp"
 
+#include <memory>
 #include <vector>
 
 namespace simgrid {
@@ -21,7 +22,6 @@ public:
   SwappedContextFactory();
   SwappedContextFactory(const SwappedContextFactory&) = delete;
   SwappedContextFactory& operator=(const SwappedContextFactory&) = delete;
-  ~SwappedContextFactory() override;
   void run_all() override;
 
 private:
@@ -30,7 +30,7 @@ private:
   unsigned long process_index_ = 0; // Next actor to execute during sequential run_all()
 
   /* For the parallel execution */
-  simgrid::xbt::Parmap<smx_actor_t>* parmap_;
+  std::unique_ptr<simgrid::xbt::Parmap<smx_actor_t>> parmap_;
   std::vector<SwappedContext*> workers_context_; /* space to save the worker's context in each thread */
   std::atomic<uintptr_t> threads_working_{0};    /* number of threads that have started their work */
 };