Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make field 'SwappedContext::worker_context_' private.
[simgrid.git] / src / kernel / context / ContextSwapped.hpp
index 25f22c2..644245e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2019. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2009-2020. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -18,20 +18,18 @@ class SwappedContext;
 class SwappedContextFactory : public ContextFactory {
   friend SwappedContext; // Reads whether we are in parallel mode
 public:
-  SwappedContextFactory();
+  SwappedContextFactory()                             = default;
   SwappedContextFactory(const SwappedContextFactory&) = delete;
   SwappedContextFactory& operator=(const SwappedContextFactory&) = delete;
   void run_all() override;
 
 private:
-  bool parallel_;
-
   /* For the sequential execution */
   unsigned long process_index_     = 0;       // next actor to execute
   SwappedContext* maestro_context_ = nullptr; // save maestro's context
 
-  /* For the parallel execution */
-  std::unique_ptr<simgrid::xbt::Parmap<smx_actor_t>> parmap_;
+  /* For the parallel execution, will be created lazily with the right parameters if needed (ie, in parallel) */
+  std::unique_ptr<simgrid::xbt::Parmap<smx_actor_t>> parmap_{nullptr};
 };
 
 class SwappedContext : public Context {
@@ -43,14 +41,12 @@ public:
 
   void suspend() override;
   virtual void resume();
-  void stop() override;
+  XBT_ATTRIB_NORETURN void stop() override;
 
   virtual void swap_into(SwappedContext* to) = 0; // Defined in Raw, Boost and UContext subclasses
 
   unsigned char* get_stack();
 
-  static thread_local SwappedContext* worker_context_;
-
 #if HAVE_SANITIZER_ADDRESS_FIBER_SUPPORT
   const void* asan_stack_   = nullptr;
   size_t asan_stack_size_   = 0;
@@ -59,8 +55,10 @@ public:
 #endif
 
 private:
-  unsigned char* stack_ = nullptr;       /* the thread stack */
-  SwappedContextFactory* const factory_; // for sequential and parallel run_all()
+  static thread_local SwappedContext* worker_context_;
+
+  unsigned char* stack_ = nullptr; // the thread stack
+  SwappedContextFactory& factory_; // for sequential and parallel run_all()
 
 #if HAVE_VALGRIND_H
   unsigned int valgrind_stack_id_;