From 55092bf3f9fe1cccfe72f7ef81fcd51f9a0eb4ca Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 1 Aug 2016 16:49:51 +0200 Subject: [PATCH] Populate the kernel::context namespace and continue separating concerns out of simix This is also the objectification of SimIX. The numerous globals out there should be moved to something like an EngineImpl, at some point. --- include/simgrid/simix.h | 10 +- include/simgrid/simix.hpp | 93 ------------ src/kernel/activity/SynchroSleep.cpp | 1 + src/kernel/context/Context.cpp | 20 ++- src/kernel/context/Context.hpp | 206 +++++++++++++++++++++++++++ src/kernel/context/ContextBoost.cpp | 6 +- src/kernel/context/ContextBoost.hpp | 6 +- src/kernel/context/ContextRaw.cpp | 16 +-- src/kernel/context/ContextThread.cpp | 6 +- src/kernel/context/ContextThread.hpp | 8 +- src/kernel/context/ContextUnix.cpp | 26 ++-- src/mc/mc_record.cpp | 3 +- src/s4u/s4u_actor.cpp | 1 + src/simix/ActorImpl.cpp | 6 +- src/simix/smx_context.cpp | 14 +- src/simix/smx_private.h | 82 +---------- tools/cmake/DefinePackages.cmake | 1 + 17 files changed, 282 insertions(+), 223 deletions(-) create mode 100644 src/kernel/context/Context.hpp diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index 6b03ad7917..458a8ea8a1 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -19,6 +19,12 @@ #ifdef __cplusplus namespace simgrid { +namespace kernel { +namespace context { + class Context; + class ContextFactory; +}} + namespace simix { /** @brief Process datatype @@ -29,14 +35,12 @@ namespace simix { \see m_process_management @{ */ class ActorImpl; - class Context; - class ContextFactory; class Mutex; class Mailbox; } } -typedef simgrid::simix::Context *smx_context_t; +typedef simgrid::kernel::context::Context *smx_context_t; typedef simgrid::simix::ActorImpl *smx_process_t; typedef simgrid::simix::Mutex *smx_mutex_t; typedef simgrid::simix::Mailbox *smx_mailbox_t; diff --git a/include/simgrid/simix.hpp b/include/simgrid/simix.hpp index d08f865bfe..d4200a3080 100644 --- a/include/simgrid/simix.hpp +++ b/include/simgrid/simix.hpp @@ -74,99 +74,6 @@ typename std::result_of::type kernelImmediate(F&& code) return result.get(); } -class Context; -class ContextFactory; - -XBT_PUBLIC_CLASS ContextFactory { -private: - std::string name_; -public: - - explicit ContextFactory(std::string name) : name_(std::move(name)) {} - virtual ~ContextFactory(); - virtual Context* create_context(std::function code, - void_pfn_smxprocess_t cleanup, smx_process_t process) = 0; - - // Optional methods for attaching main() as a context: - - /** Creates a context from the current context of execution - * - * This will not work on all implementation of `ContextFactory`. - */ - virtual Context* attach(void_pfn_smxprocess_t cleanup_func, smx_process_t process); - virtual Context* create_maestro(std::function code, smx_process_t process); - - 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 - T* new_context(Args&&... args) - { - T* context = new T(std::forward(args)...); - this->declare_context(context, sizeof(T)); - return context; - } -}; - -XBT_PUBLIC_CLASS Context { -private: - std::function code_; - void_pfn_smxprocess_t cleanup_func_ = nullptr; - smx_process_t process_ = nullptr; -public: - bool iwannadie; -public: - Context(std::function code, - void_pfn_smxprocess_t cleanup_func, - smx_process_t process); - void operator()() - { - code_(); - } - bool has_code() const - { - return (bool) code_; - } - smx_process_t process() - { - return this->process_; - } - void set_cleanup(void_pfn_smxprocess_t cleanup) - { - cleanup_func_ = cleanup; - } - - // Virtual methods - virtual ~Context(); - virtual void stop(); - virtual void suspend() = 0; -}; - -XBT_PUBLIC_CLASS AttachContext : public Context { -public: - - AttachContext(std::function code, - void_pfn_smxprocess_t cleanup_func, - smx_process_t process) - : Context(std::move(code), cleanup_func, process) - {} - - ~AttachContext() override; - - /** Called by the context when it is ready to give control - * to the maestro. - */ - virtual void attach_start() = 0; - - /** Called by the context when it has finished its job */ - virtual void attach_stop() = 0; -}; XBT_PUBLIC(void) set_maestro(std::function code); XBT_PUBLIC(void) create_maestro(std::function code); diff --git a/src/kernel/activity/SynchroSleep.cpp b/src/kernel/activity/SynchroSleep.cpp index 5335d50e4e..9fe6be34dc 100644 --- a/src/kernel/activity/SynchroSleep.cpp +++ b/src/kernel/activity/SynchroSleep.cpp @@ -7,6 +7,7 @@ #include +#include "src/kernel/context/Context.hpp" #include "src/kernel/activity/SynchroSleep.hpp" #include "src/surf/surf_interface.hpp" diff --git a/src/kernel/context/Context.cpp b/src/kernel/context/Context.cpp index 5817bc74e6..29393ea87e 100644 --- a/src/kernel/context/Context.cpp +++ b/src/kernel/context/Context.cpp @@ -14,6 +14,7 @@ #include "mc/mc.h" +#include "src/kernel/context/Context.hpp" #include "src/simix/smx_private.h" void SIMIX_process_set_cleanup_function( @@ -39,7 +40,8 @@ smx_context_t SIMIX_context_new( } namespace simgrid { -namespace simix { +namespace kernel { +namespace context { ContextFactoryInitializer factory_initializer = nullptr; @@ -103,5 +105,21 @@ AttachContext::~AttachContext() { } +}}} + +/** @brief Executes all the processes to run (in parallel if possible). */ +void SIMIX_context_runall(void) +{ + if (!xbt_dynar_is_empty(simix_global->process_to_run)) + simix_global->context_factory->run_all(); } + +/** @brief returns the current running context */ +smx_context_t SIMIX_context_self(void) +{ + if (simix_global && simix_global->context_factory) + return simix_global->context_factory->self(); + else + return nullptr; } + diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp new file mode 100644 index 0000000000..cfd5b410de --- /dev/null +++ b/src/kernel/context/Context.hpp @@ -0,0 +1,206 @@ +/* Copyright (c) 2007-2016. 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. */ + +#ifndef _SIMGRID_KERNEL_CONTEXT_CONTEXT_HPP +#define _SIMGRID_KERNEL_CONTEXT_CONTEXT_HPP + +#include +#include +#include +#include + +#include + +#include "src/internal_config.h" +#include "simgrid/simix.h" +#include "surf/surf.h" +#include "xbt/base.h" +#include "xbt/fifo.h" +#include "xbt/swag.h" +#include "xbt/dict.h" +#include "xbt/mallocator.h" +#include "xbt/config.h" +#include "xbt/xbt_os_time.h" +#include "xbt/function_types.h" +#include "src/xbt/ex_interface.h" +#include "src/instr/instr_private.h" +#include "src/simix/smx_host_private.h" +#include "src/simix/smx_io_private.h" +#include "src/simix/smx_network_private.h" +#include "src/simix/popping_private.h" +#include "src/simix/smx_synchro_private.h" + +#include +#include "src/simix/ActorImpl.hpp" + +#ifdef __cplusplus + +#include + +namespace simgrid { +namespace kernel { +namespace context { + + class Context; + class ContextFactory; + + XBT_PUBLIC_CLASS ContextFactory { + private: + std::string name_; + public: + + explicit ContextFactory(std::string name) : name_(std::move(name)) {} + virtual ~ContextFactory(); + virtual Context* create_context(std::function code, + void_pfn_smxprocess_t cleanup, smx_process_t process) = 0; + + // Optional methods for attaching main() as a context: + + /** Creates a context from the current context of execution + * + * This will not work on all implementation of `ContextFactory`. + */ + virtual Context* attach(void_pfn_smxprocess_t cleanup_func, smx_process_t process); + virtual Context* create_maestro(std::function code, smx_process_t process); + + 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 + T* new_context(Args&&... args) + { + T* context = new T(std::forward(args)...); + this->declare_context(context, sizeof(T)); + return context; + } + }; + + XBT_PUBLIC_CLASS Context { + private: + std::function code_; + void_pfn_smxprocess_t cleanup_func_ = nullptr; + smx_process_t process_ = nullptr; + public: + bool iwannadie; + public: + Context(std::function code, + void_pfn_smxprocess_t cleanup_func, + smx_process_t process); + void operator()() + { + code_(); + } + bool has_code() const + { + return (bool) code_; + } + smx_process_t process() + { + return this->process_; + } + void set_cleanup(void_pfn_smxprocess_t cleanup) + { + cleanup_func_ = cleanup; + } + + // Virtual methods + virtual ~Context(); + virtual void stop(); + virtual void suspend() = 0; + }; + + XBT_PUBLIC_CLASS AttachContext : public Context { + public: + + AttachContext(std::function code, + void_pfn_smxprocess_t cleanup_func, + smx_process_t process) + : Context(std::move(code), cleanup_func, process) + {} + + ~AttachContext() override; + + /** Called by the context when it is ready to give control + * to the maestro. + */ + virtual void attach_start() = 0; + + /** Called by the context when it has finished its job */ + virtual void attach_stop() = 0; + }; + +/* This allows Java to hijack the context factory (Java induces factories of factory :) */ +typedef ContextFactory* (*ContextFactoryInitializer)(void); +XBT_PUBLIC_DATA(ContextFactoryInitializer) factory_initializer; + +XBT_PRIVATE ContextFactory* thread_factory(); +XBT_PRIVATE ContextFactory* sysv_factory(); +XBT_PRIVATE ContextFactory* raw_factory(); +XBT_PRIVATE ContextFactory* boost_factory(); + +}}} + +typedef simgrid::kernel::context::ContextFactory *smx_context_factory_t; + +#else + +typedef struct s_smx_context_factory *smx_context_factory_t; + +#endif + +SG_BEGIN_DECL() + + +XBT_PRIVATE void SIMIX_context_mod_init(void); +XBT_PRIVATE void SIMIX_context_mod_exit(void); + +XBT_PRIVATE smx_context_t SIMIX_context_new( + std::function code, + void_pfn_smxprocess_t cleanup_func, + smx_process_t simix_process); + +#ifndef WIN32 +XBT_PUBLIC_DATA(char sigsegv_stack[SIGSTKSZ]); +#endif + +/* We are using the bottom of the stack to save some information, like the + * valgrind_stack_id. Define smx_context_usable_stack_size to give the remaining + * size for the stack. */ +#if HAVE_VALGRIND_H +# define smx_context_usable_stack_size \ + (smx_context_stack_size - sizeof(unsigned int)) /* for valgrind_stack_id */ +#else +# define smx_context_usable_stack_size smx_context_stack_size +#endif + +/** @brief Executes all the processes to run (in parallel if possible). */ +XBT_PRIVATE void SIMIX_context_runall(void); +/** @brief returns the current running context */ +XBT_PRIVATE smx_context_t SIMIX_context_self(void); + +XBT_PRIVATE void *SIMIX_context_stack_new(void); +XBT_PRIVATE void SIMIX_context_stack_delete(void *stack); + +XBT_PRIVATE void SIMIX_context_set_current(smx_context_t context); +XBT_PRIVATE smx_context_t SIMIX_context_get_current(void); + +XBT_PUBLIC(int) SIMIX_process_get_maxpid(void); + +XBT_PRIVATE void SIMIX_post_create_environment(void); + +// FIXME, Dirty hack for SMPI+MSG +XBT_PRIVATE void SIMIX_process_set_cleanup_function(smx_process_t process, void_pfn_smxprocess_t cleanup); + +SG_END_DECL() + +XBT_PRIVATE simgrid::simix::ActorCodeFactory& SIMIX_get_actor_code_factory(const char *name); + +#endif diff --git a/src/kernel/context/ContextBoost.cpp b/src/kernel/context/ContextBoost.cpp index 17fd4c87ea..f861f8d1f2 100644 --- a/src/kernel/context/ContextBoost.cpp +++ b/src/kernel/context/ContextBoost.cpp @@ -21,7 +21,8 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class BoostSerialContext : public BoostContext { public: @@ -289,5 +290,4 @@ XBT_PRIVATE ContextFactory* boost_factory() return new BoostContextFactory(); } -} -} +}}} // namespace diff --git a/src/kernel/context/ContextBoost.hpp b/src/kernel/context/ContextBoost.hpp index 7e9414d233..957bd77bc3 100644 --- a/src/kernel/context/ContextBoost.hpp +++ b/src/kernel/context/ContextBoost.hpp @@ -15,7 +15,8 @@ namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class BoostContext; class BoostSerialContext; @@ -63,7 +64,6 @@ public: void run_all() override; }; -} -} +}}} // namespace #endif diff --git a/src/kernel/context/ContextRaw.cpp b/src/kernel/context/ContextRaw.cpp index 600e935ee2..6e13140533 100644 --- a/src/kernel/context/ContextRaw.cpp +++ b/src/kernel/context/ContextRaw.cpp @@ -23,7 +23,8 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); // ***** Class definitions namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class RawContext; class RawContextFactory; @@ -75,20 +76,19 @@ ContextFactory* raw_factory() return new RawContextFactory(); } -} -} +}}} // namespace // ***** Loads of static stuff #if HAVE_THREAD_CONTEXTS static xbt_parmap_t raw_parmap; -static simgrid::simix::RawContext** raw_workers_context; /* space to save the worker context in each thread */ +static simgrid::kernel::context::RawContext** raw_workers_context; /* space to save the worker context in each thread */ static uintptr_t raw_threads_working; /* number of threads that have started their work */ static xbt_os_thread_key_t raw_worker_id_key; /* thread-specific storage for the thread id */ #endif static unsigned long raw_process_index = 0; /* index of the next process to run in the * list of runnable processes */ -static simgrid::simix::RawContext* raw_maestro_context; +static simgrid::kernel::context::RawContext* raw_maestro_context; static bool raw_context_parallel = false; @@ -262,7 +262,8 @@ void raw_swapcontext(raw_stack_t* old, raw_stack_t new_context) { // ***** Method definitions namespace simgrid { -namespace simix { +namespace kernel { +namespace context { RawContextFactory::RawContextFactory() : ContextFactory("RawContextFactory") @@ -471,5 +472,4 @@ void RawContextFactory::run_all_adaptative() } } -} -} +}}} diff --git a/src/kernel/context/ContextThread.cpp b/src/kernel/context/ContextThread.cpp index 8b424d4f13..0dbc048335 100644 --- a/src/kernel/context/ContextThread.cpp +++ b/src/kernel/context/ContextThread.cpp @@ -21,7 +21,8 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); static xbt_os_sem_t smx_ctx_thread_sem = nullptr; namespace simgrid { -namespace simix { +namespace kernel { +namespace context { XBT_PRIVATE ContextFactory* thread_factory() { @@ -234,5 +235,4 @@ void ThreadContext::attach_stop() xbt_os_thread_set_extra_data(nullptr); } -} -} +}}} // namespace diff --git a/src/kernel/context/ContextThread.hpp b/src/kernel/context/ContextThread.hpp index 77923bf92f..8cc8753538 100644 --- a/src/kernel/context/ContextThread.hpp +++ b/src/kernel/context/ContextThread.hpp @@ -13,7 +13,8 @@ namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class ThreadContext; class ThreadContextFactory; @@ -57,7 +58,6 @@ public: ThreadContext* create_maestro(std::function code, smx_process_t process) override; }; -} -} +}}} // namespace -#endif \ No newline at end of file +#endif diff --git a/src/kernel/context/ContextUnix.cpp b/src/kernel/context/ContextUnix.cpp index 02b3a6e140..35154dd697 100644 --- a/src/kernel/context/ContextUnix.cpp +++ b/src/kernel/context/ContextUnix.cpp @@ -48,23 +48,23 @@ static void simgrid_makecontext(ucontext_t* ucp, void (*func)(int first, ...), v XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class UContext; class SerialUContext; class ParallelUContext; class UContextFactory; -} -} +}}} #if HAVE_THREAD_CONTEXTS static xbt_parmap_t sysv_parmap; -static simgrid::simix::ParallelUContext** sysv_workers_context; /* space to save the worker's context in each thread */ +static simgrid::kernel::context::ParallelUContext** sysv_workers_context; /* space to save the worker's context in each thread */ static uintptr_t sysv_threads_working; /* number of threads that have started their work */ static xbt_os_thread_key_t sysv_worker_id_key; /* thread-specific storage for the thread id */ #endif static unsigned long sysv_process_index = 0; /* index of the next process to run in the * list of runnable processes */ -static simgrid::simix::UContext* sysv_maestro_context; +static simgrid::kernel::context::UContext* sysv_maestro_context; static bool sysv_parallel; // The name of this function is currently hardcoded in the code (as string). @@ -72,7 +72,8 @@ static bool sysv_parallel; static void smx_ctx_sysv_wrapper(int first, ...); namespace simgrid { -namespace simix { +namespace kernel { +namespace context { class UContext : public Context { protected: @@ -233,14 +234,13 @@ UContext::~UContext() SIMIX_context_stack_delete(this->stack_); } -} -} +}}} // namespace simgrid::kernel::context static void smx_ctx_sysv_wrapper(int first, ...) { // Rebuild the Context* pointer from the integers: int ctx_addr[CTX_ADDR_LEN]; - simgrid::simix::UContext* context; + simgrid::kernel::context::UContext* context; ctx_addr[0] = first; if (CTX_ADDR_LEN > 1) { va_list ap; @@ -249,14 +249,15 @@ static void smx_ctx_sysv_wrapper(int first, ...) ctx_addr[i] = va_arg(ap, int); va_end(ap); } - memcpy(&context, ctx_addr, sizeof(simgrid::simix::UContext*)); + memcpy(&context, ctx_addr, sizeof(simgrid::kernel::context::UContext*)); (*context)(); context->stop(); } namespace simgrid { -namespace simix { +namespace kernel { +namespace context { void SerialUContext::stop() { @@ -376,6 +377,5 @@ void ParallelUContext::suspend() #endif } -} -} +}}} // namespace simgrid::kernel::context diff --git a/src/mc/mc_record.cpp b/src/mc/mc_record.cpp index 4a8fb95748..ce0fc90312 100644 --- a/src/mc/mc_record.cpp +++ b/src/mc/mc_record.cpp @@ -17,6 +17,7 @@ #include "simgrid/simix.h" +#include "src/kernel/context/Context.hpp" #include "src/simix/ActorImpl.hpp" #include "src/simix/smx_private.h" #include "src/mc/mc_replay.h" @@ -69,7 +70,7 @@ void replay(RecordTrace const& trace) void replay(const char* path_string) { - simgrid::mc::processes_time.resize(simix_process_maxpid); + simgrid::mc::processes_time.resize(SIMIX_process_get_maxpid()); simgrid::mc::RecordTrace trace = simgrid::mc::parseRecordTrace(path_string); simgrid::mc::replay(trace); simgrid::mc::processes_time.clear(); diff --git a/src/s4u/s4u_actor.cpp b/src/s4u/s4u_actor.cpp index 6db4d97e9e..6eb6716684 100644 --- a/src/s4u/s4u_actor.cpp +++ b/src/s4u/s4u_actor.cpp @@ -12,6 +12,7 @@ #include "simgrid/s4u/host.hpp" #include "simgrid/s4u/mailbox.hpp" +#include "src/kernel/context/Context.hpp" #include "src/simix/smx_private.h" XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor,"S4U actors"); diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 5a454624bd..2407815003 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -395,7 +395,7 @@ smx_process_t SIMIX_process_attach( /* Tracing the process creation */ TRACE_msg_process_create(process->name.c_str(), process->pid, process->host); - auto context = dynamic_cast(process->context); + auto context = dynamic_cast(process->context); if (!context) xbt_die("Not a suitable context"); @@ -405,7 +405,7 @@ smx_process_t SIMIX_process_attach( void SIMIX_process_detach() { - auto context = dynamic_cast(SIMIX_context_self()); + auto context = dynamic_cast(SIMIX_context_self()); if (!context) xbt_die("Not a suitable context"); @@ -414,7 +414,7 @@ void SIMIX_process_detach() // Let maestro ignore we are still alive: // xbt_swag_remove(context->process(), simix_global->process_list); - // TODDO, Remove from proces list: + // TODO, Remove from proces list: // xbt_swag_remove(process, sg_host_simix(host)->process_list); context->attach_stop(); diff --git a/src/simix/smx_context.cpp b/src/simix/smx_context.cpp index f8c7e74473..db956825a5 100644 --- a/src/simix/smx_context.cpp +++ b/src/simix/smx_context.cpp @@ -45,18 +45,18 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix, "Context switching mechanism"); -static std::pair context_factories[] = { +static std::pair context_factories[] = { #if HAVE_RAW_CONTEXTS - { "raw", &simgrid::simix::raw_factory }, + { "raw", &simgrid::kernel::context::raw_factory }, #endif #if HAVE_UCONTEXT_CONTEXTS - { "ucontext", &simgrid::simix::sysv_factory }, + { "ucontext", &simgrid::kernel::context::sysv_factory }, #endif #if HAVE_BOOST_CONTEXTS - { "boost", &simgrid::simix::boost_factory }, + { "boost", &simgrid::kernel::context::boost_factory }, #endif #if HAVE_THREAD_CONTEXTS - { "thread", &simgrid::simix::thread_factory }, + { "thread", &simgrid::kernel::context::thread_factory }, #endif }; @@ -131,8 +131,8 @@ void SIMIX_context_mod_init(void) if (simix_global->context_factory) return; /* select the context factory to use to create the contexts */ - if (simgrid::simix::factory_initializer) { // Give Java a chance to hijack the factory mechanism - simix_global->context_factory = simgrid::simix::factory_initializer(); + if (simgrid::kernel::context::factory_initializer) { // Give Java a chance to hijack the factory mechanism + simix_global->context_factory = simgrid::kernel::context::factory_initializer(); return; } /* use the factory specified by --cfg=contexts/factory:value */ diff --git a/src/simix/smx_private.h b/src/simix/smx_private.h index fcb5469858..74e67b33e8 100644 --- a/src/simix/smx_private.h +++ b/src/simix/smx_private.h @@ -35,33 +35,7 @@ #include #include "src/simix/ActorImpl.hpp" - -#ifdef __cplusplus - -#include - -namespace simgrid { -namespace simix { - -/* This allows Java to hijack the context factory (Java induces factories of factory :) */ -typedef ContextFactory* (*ContextFactoryInitializer)(void); -XBT_PUBLIC_DATA(ContextFactoryInitializer) factory_initializer; - -XBT_PRIVATE ContextFactory* thread_factory(); -XBT_PRIVATE ContextFactory* sysv_factory(); -XBT_PRIVATE ContextFactory* raw_factory(); -XBT_PRIVATE ContextFactory* boost_factory(); - -} -} - -typedef simgrid::simix::ContextFactory *smx_context_factory_t; - -#else - -typedef struct s_smx_context_factory *smx_context_factory_t; - -#endif +#include "src/kernel/context/Context.hpp" /********************************** Simix Global ******************************/ @@ -100,8 +74,6 @@ SG_BEGIN_DECL() XBT_PUBLIC_DATA(std::unique_ptr) simix_global; -extern XBT_PRIVATE unsigned long simix_process_maxpid; - XBT_PUBLIC(void) SIMIX_clean(void); /******************************** Exceptions *********************************/ @@ -121,59 +93,7 @@ typedef struct s_smx_file { void* data; /**< @brief user data */ } s_smx_file_t; -XBT_PRIVATE void SIMIX_context_mod_init(void); -XBT_PRIVATE void SIMIX_context_mod_exit(void); - -XBT_PRIVATE smx_context_t SIMIX_context_new( - std::function code, - void_pfn_smxprocess_t cleanup_func, - smx_process_t simix_process); - -#ifndef WIN32 -XBT_PUBLIC_DATA(char sigsegv_stack[SIGSTKSZ]); -#endif - -/* We are using the bottom of the stack to save some information, like the - * valgrind_stack_id. Define smx_context_usable_stack_size to give the remaining - * size for the stack. */ -#if HAVE_VALGRIND_H -# define smx_context_usable_stack_size \ - (smx_context_stack_size - sizeof(unsigned int)) /* for valgrind_stack_id */ -#else -# define smx_context_usable_stack_size smx_context_stack_size -#endif - -/** @brief Executes all the processes to run (in parallel if possible). */ -static inline void SIMIX_context_runall(void) -{ - if (!xbt_dynar_is_empty(simix_global->process_to_run)) - simix_global->context_factory->run_all(); -} - -/** @brief returns the current running context */ -static inline smx_context_t SIMIX_context_self(void) -{ - if (simix_global && simix_global->context_factory) - return simix_global->context_factory->self(); - else - return nullptr; -} - -XBT_PRIVATE void *SIMIX_context_stack_new(void); -XBT_PRIVATE void SIMIX_context_stack_delete(void *stack); - -XBT_PRIVATE void SIMIX_context_set_current(smx_context_t context); -XBT_PRIVATE smx_context_t SIMIX_context_get_current(void); - -XBT_PUBLIC(int) SIMIX_process_get_maxpid(void); - -XBT_PRIVATE void SIMIX_post_create_environment(void); - -// FIXME, Dirty hack for SMPI+MSG -XBT_PRIVATE void SIMIX_process_set_cleanup_function(smx_process_t process, void_pfn_smxprocess_t cleanup); SG_END_DECL() -XBT_PRIVATE simgrid::simix::ActorCodeFactory& SIMIX_get_actor_code_factory(const char *name); - #endif diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 5df2e0414a..c80f95e83e 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -341,6 +341,7 @@ set(SIMIX_SRC src/simix/libsmx.cpp src/simix/smx_context.cpp src/kernel/context/Context.cpp + src/kernel/context/Context.hpp src/kernel/context/ContextRaw.cpp src/simix/smx_deployment.cpp src/simix/smx_environment.cpp -- 2.20.1