-/* Copyright (c) 2007-2010, 2012-2014. The SimGrid Team.
+/* Copyright (c) 2007-2010, 2012-2015. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#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 "popping_private.h"
#include "smx_synchro_private.h"
+SG_BEGIN_DECL()
+
/* Define only for SimGrid benchmarking purposes */
//#define TIME_BENCH_PER_SR /* this aims at measuring the time spent in each scheduling round per each thread. The code is thus run in sequential to bench separately each SSR */
//#define TIME_BENCH_AMDAHL /* this aims at measuring the porting of time that could be parallelized at maximum (to get the optimal speedup by applying the amdahl law). */
//#define TIME_BENCH_ENTIRE_SRS /* more general benchmark than TIME_BENCH_PER_SR. It aims to measure the total time spent in a whole scheduling round (including synchro costs)*/
#ifdef TIME_BENCH_PER_SR
-void smx_ctx_raw_new_sr(void);
+XBT_PRIVATE void smx_ctx_raw_new_sr(void);
#endif
/********************************** Simix Global ******************************/
typedef struct s_smx_global {
xbt_dict_t registered_functions;
smx_creation_func_t create_process_function;
void_pfn_smxprocess_t_smxprocess_t kill_process_function;
+ /** Callback used when killing a SMX_process */
void_pfn_smxprocess_t cleanup_process_function;
xbt_mallocator_t synchro_mallocator;
- void_pfn_smxhost_t autorestart;
+ void_pfn_sghost_t autorestart;
#ifdef TIME_BENCH_AMDAHL
xbt_os_timer_t timer_seq; /* used to bench the sequential and parallel parts of the simulation, if requested to */
xbt_os_timer_t timer_par;
#endif
-} s_smx_global_t, *smx_global_t;
-extern smx_global_t simix_global;
-extern unsigned long simix_process_maxpid;
+ xbt_os_mutex_t mutex;
+} s_smx_global_t, *smx_global_t;
-extern xbt_dict_t watched_hosts_lib;
+XBT_PUBLIC_DATA(smx_global_t) simix_global;
+extern XBT_PRIVATE unsigned long simix_process_maxpid;
-#ifdef __cplusplus
-extern "C" {
-#endif
XBT_PUBLIC(void) SIMIX_clean(void);
-#ifdef __cplusplus
-}
-#endif
/******************************** Exceptions *********************************/
/** @brief Ask to the provided simix process to raise the provided exception */
union {
struct {
- smx_host_t host; /* The host where the execution takes place */
+ sg_host_t host; /* The host where the execution takes place */
surf_action_t surf_exec; /* The Surf execution action encapsulated */
} execution; /* Possibly parallel execution */
} comm;
struct {
- smx_host_t host; /* The host that is sleeping */
+ sg_host_t host; /* The host that is sleeping */
surf_action_t surf_sleep; /* The Surf sleeping action encapsulated */
} sleep;
} synchro;
struct {
- smx_host_t host;
+ sg_host_t host;
surf_action_t surf_io;
} io;
};
int latency_limited;
#endif
-#ifdef HAVE_TRACING
char *category; /* simix action category for instrumentation */
-#endif
} s_smx_synchro_t;
-void SIMIX_context_mod_init(void);
-void SIMIX_context_mod_exit(void);
+XBT_PRIVATE void SIMIX_context_mod_init(void);
+XBT_PRIVATE void SIMIX_context_mod_exit(void);
#ifndef WIN32
XBT_PUBLIC_DATA(char sigsegv_stack[SIGSTKSZ]);
# define smx_context_usable_stack_size smx_context_stack_size
#endif
-void *SIMIX_context_stack_new(void);
-void SIMIX_context_stack_delete(void *stack);
+XBT_PRIVATE void *SIMIX_context_stack_new(void);
+XBT_PRIVATE void SIMIX_context_stack_delete(void *stack);
-void SIMIX_context_set_current(smx_context_t context);
-smx_context_t SIMIX_context_get_current(void);
+XBT_PRIVATE void SIMIX_context_set_current(smx_context_t context);
+XBT_PRIVATE smx_context_t SIMIX_context_get_current(void);
/* All factories init */
-void SIMIX_ctx_thread_factory_init(smx_context_factory_t *factory);
-void SIMIX_ctx_sysv_factory_init(smx_context_factory_t *factory);
-void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory);
+XBT_PRIVATE void SIMIX_ctx_thread_factory_init(smx_context_factory_t *factory);
+XBT_PRIVATE void SIMIX_ctx_sysv_factory_init(smx_context_factory_t *factory);
+XBT_PRIVATE void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory);
+XBT_PRIVATE void SIMIX_ctx_boost_factory_init(smx_context_factory_t *factory);
/* ****************************** */
/* context manipulation functions */
XBT_PUBLIC(int) SIMIX_process_get_maxpid(void);
-void SIMIX_post_create_environment(void);
+XBT_PRIVATE void SIMIX_post_create_environment(void);
+
+SG_END_DECL()
#endif