#include "xbt/parmap.hpp"
-#include "src/simix/smx_private.h"
#include "mc/mc.h"
+#include "src/simix/smx_private.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
raw_workers_context = xbt_new(RawContext*, nthreads);
raw_maestro_context = nullptr;
#endif
- // TODO, if(SIMIX_context_get_parallel_threshold() > 1) => choose dynamically
+ // TODO: choose dynamically when SIMIX_context_get_parallel_threshold() > 1
}
}
void RawContext::wrapper(void* arg)
{
RawContext* context = static_cast<RawContext*>(arg);
- (*context)();
- context->stop();
+ try {
+ (*context)();
+ context->Context::stop();
+ } catch (StopRequest const&) {
+ XBT_DEBUG("Caught a StopRequest");
+ }
+ context->suspend();
}
RawContext::RawContext(std::function<void()> code,
void RawContext::stop()
{
Context::stop();
- this->suspend();
+ throw StopRequest();
}
void RawContextFactory::run_all()