-/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2021. 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. */
class XBT_PUBLIC ContextFactory {
public:
- explicit ContextFactory() {}
+ explicit ContextFactory() = default;
ContextFactory(const ContextFactory&) = delete;
ContextFactory& operator=(const ContextFactory&) = delete;
virtual ~ContextFactory();
protected:
template <class T, class... Args> T* new_context(Args&&... args)
{
- T* context = new T(std::forward<Args>(args)...);
+ auto* context = new T(std::forward<Args>(args)...);
context->declare_context(sizeof(T));
return context;
}
class XBT_PUBLIC Context {
friend ContextFactory;
+ static thread_local Context* current_context_;
+
std::function<void()> code_;
actor::ActorImpl* actor_ = nullptr;
bool iwannadie_ = false;
void declare_context(std::size_t size);
public:
+#ifndef WIN32
+ static int install_sigsegv_stack(stack_t* old_stack, bool enable);
+#endif
+
Context(std::function<void()>&& code, actor::ActorImpl* actor);
Context(const Context&) = delete;
Context& operator=(const Context&) = delete;
/* This allows Java to hijack the context factory (Java induces factories of factory :) */
-typedef ContextFactory* (*ContextFactoryInitializer)();
+using ContextFactoryInitializer = ContextFactory* (*)();
XBT_PUBLIC_DATA ContextFactoryInitializer factory_initializer;
XBT_PRIVATE ContextFactory* thread_factory();
} // namespace kernel
} // namespace simgrid
-typedef simgrid::kernel::context::ContextFactory *smx_context_factory_t;
-
XBT_PRIVATE void SIMIX_context_mod_init();
XBT_PRIVATE void SIMIX_context_mod_exit();
-
-#ifndef WIN32
-XBT_PUBLIC_DATA unsigned char sigsegv_stack[SIGSTKSZ];
-#endif
#endif