Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Context creation: Fix one OOP design issue
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Mon, 12 Nov 2018 03:49:39 +0000 (04:49 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Mon, 12 Nov 2018 03:50:05 +0000 (04:50 +0100)
src/kernel/context/Context.cpp
src/kernel/context/Context.hpp

index 7104651..a5de192 100644 (file)
@@ -39,12 +39,12 @@ Context* ContextFactory::self()
   return SIMIX_context_get_current();
 }
 
-void ContextFactory::declare_context(void* context, std::size_t size)
+void Context::declare_context(std::size_t size)
 {
 #if SIMGRID_HAVE_MC
   /* Store the address of the stack in heap to compare it apart of heap comparison */
   if(MC_is_active())
-    MC_ignore_heap(context, size);
+    MC_ignore_heap(this, size);
 #endif
 }
 
index 5c9de3e..e6f425b 100644 (file)
@@ -36,23 +36,24 @@ public:
   virtual void run_all() = 0;
   virtual Context* self();
   std::string const& name() const { return name_; }
-private:
-  void declare_context(void* T, std::size_t size);
 
 protected:
   template <class T, class... Args> T* new_context(Args&&... args)
   {
     T* context = new T(std::forward<Args>(args)...);
-    this->declare_context(context, sizeof(T));
+    context->declare_context(sizeof(T));
     return context;
   }
 };
 
 class XBT_PUBLIC Context {
+  friend ContextFactory;
+
 private:
   std::function<void()> code_;
   void_pfn_smxprocess_t cleanup_func_ = nullptr;
   smx_actor_t actor_                  = nullptr;
+  void declare_context(std::size_t size);
 
 public:
   class StopRequest {