Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Further code simplifications now that the Thread context backend is always available
[simgrid.git] / src / kernel / context / ContextUnix.cpp
index d821c3c..e31ba6a 100644 (file)
@@ -32,31 +32,22 @@ namespace context {
 
 UContextFactory::UContextFactory() : ContextFactory("UContextFactory"), parallel_(SIMIX_context_is_parallel())
 {
-  UContext::setMaestro(nullptr);
-  if (parallel_) {
-#if HAVE_THREAD_CONTEXTS
+  UContext::set_maestro(nullptr);
+  if (parallel_)
     ParallelUContext::initialize();
-#else
-    xbt_die("No thread support for parallel context execution");
-#endif
-  }
 }
 
 UContextFactory::~UContextFactory()
 {
-#if HAVE_THREAD_CONTEXTS
   if (parallel_)
     ParallelUContext::finalize();
-#endif
 }
 
 Context* UContextFactory::create_context(std::function<void()> code, void_pfn_smxprocess_t cleanup, smx_actor_t process)
 {
-#if HAVE_THREAD_CONTEXTS
   if (parallel_)
     return new_context<ParallelUContext>(std::move(code), cleanup, process);
   else
-#endif
     return new_context<SerialUContext>(std::move(code), cleanup, process);
 }
 
@@ -66,11 +57,9 @@ Context* UContextFactory::create_context(std::function<void()> code, void_pfn_sm
  */
 void UContextFactory::run_all()
 {
-#if HAVE_THREAD_CONTEXTS
   if (parallel_)
     ParallelUContext::run_all();
   else
-#endif
     SerialUContext::run_all();
 }
 
@@ -125,8 +114,9 @@ void UContext::smx_ctx_sysv_wrapper(int i1, int i2)
     (*context)();
   } catch (simgrid::kernel::context::Context::StopRequest const&) {
     XBT_DEBUG("Caught a StopRequest");
-  } catch (simgrid::HostFailureException const&) {
-    XBT_DEBUG("Caught an HostFailureException");
+  } catch (simgrid::Exception const& e) {
+    XBT_INFO("Actor killed by an uncatched exception %s", simgrid::xbt::demangle(typeid(e).name()).get());
+    throw;
   }
   context->Context::stop();
   ASAN_ONLY(context->asan_stop_ = true);
@@ -178,7 +168,7 @@ void SerialUContext::suspend()
   } else {
     /* all processes were run, return to maestro */
     XBT_DEBUG("No more process to run");
-    next_context = static_cast<SerialUContext*>(UContext::getMaestro());
+    next_context = static_cast<SerialUContext*>(UContext::get_maestro());
   }
   SIMIX_context_set_current(next_context);
   UContext::swap(this, next_context);
@@ -187,7 +177,7 @@ void SerialUContext::suspend()
 void SerialUContext::resume()
 {
   SIMIX_context_set_current(this);
-  UContext::swap(UContext::getMaestro(), this);
+  UContext::swap(UContext::get_maestro(), this);
 }
 
 void SerialUContext::run_all()
@@ -201,8 +191,6 @@ void SerialUContext::run_all()
 
 // ParallelUContext
 
-#if HAVE_THREAD_CONTEXTS
-
 simgrid::xbt::Parmap<smx_actor_t>* ParallelUContext::parmap_;
 std::atomic<uintptr_t> ParallelUContext::threads_working_;         /* number of threads that have started their work */
 thread_local uintptr_t ParallelUContext::worker_id_;               /* thread-specific storage for the thread id */
@@ -294,8 +282,6 @@ void ParallelUContext::resume()
   // initial soul of the current working thread
 }
 
-#endif
-
 XBT_PRIVATE ContextFactory* sysv_factory()
 {
   XBT_VERB("Activating SYSV context factory");