SimGrid  3.13
Versatile Simulation of Distributed Systems
smx_process.cpp File Reference
#include "src/surf/surf_interface.hpp"
#include "smx_private.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/dict.h"
#include "mc/mc.h"
#include "src/mc/mc_replay.h"
#include "src/mc/Client.hpp"
#include "src/simix/smx_private.hpp"
#include "src/msg/msg_private.h"

Namespaces

 simgrid
 
 simgrid::simix
 

Functions

 XBT_LOG_NEW_DEFAULT_SUBCATEGORY (simix_process, simix,"Logging specific to SIMIX (process)")
 
smx_process_t SIMIX_process_self (void)
 Returns the current agent. More...
 
int SIMIX_process_has_pending_comms (smx_process_t process)
 Returns whether a process has pending asynchronous communications. More...
 
void SIMIX_process_cleanup (smx_process_t process)
 Moves a process to the list of processes to destroy. More...
 
void SIMIX_process_empty_trash (void)
 Garbage collection. More...
 
void simgrid::simix::create_maestro (std::function< void()> code)
 
void SIMIX_maestro_create (void(*code)(void *), void *data)
 Creates and runs the maestro process. More...
 
void SIMIX_process_stop (smx_process_t arg)
 Stops a process. More...
 
smx_process_t SIMIX_process_create_from_wrapper (smx_process_arg_t args)
 Same as SIMIX_process_create() but with only one argument (used by timers). More...
 
voidsimcall_HANDLER_process_create (smx_simcall_t simcall, const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart)
 
static void kill_process (void *process)
 
smx_process_t SIMIX_process_create (const char *name, xbt_main_func_t code, void *data, const char *hostname, double kill_time, int argc, char **argv, xbt_dict_t properties, int auto_restart, smx_process_t parent_process)
 Internal function to create a process. More...
 
smx_process_t SIMIX_process_attach (const char *name, void *data, const char *hostname, xbt_dict_t properties, smx_process_t parent_process)
 
void SIMIX_process_detach (void)
 
void SIMIX_process_runall (void)
 Executes the processes from simix_global->process_to_run. More...
 
void simcall_HANDLER_process_kill (smx_simcall_t simcall, smx_process_t process)
 
void SIMIX_process_kill (smx_process_t process, smx_process_t issuer)
 Internal function to kill a SIMIX process. More...
 
void SIMIX_process_throw (smx_process_t process, xbt_errcat_t cat, int value, const char *msg)
 Ask another process to raise the given exception. More...
 
void simcall_HANDLER_process_killall (smx_simcall_t simcall, int reset_pid)
 
void SIMIX_process_killall (smx_process_t issuer, int reset_pid)
 Kills all running processes. More...
 
void simcall_HANDLER_process_set_host (smx_simcall_t simcall, smx_process_t process, sg_host_t dest)
 
void SIMIX_process_change_host (smx_process_t process, sg_host_t dest)
 
void simcall_HANDLER_process_suspend (smx_simcall_t simcall, smx_process_t process)
 
smx_synchro_t SIMIX_process_suspend (smx_process_t process, smx_process_t issuer)
 
void simcall_HANDLER_process_resume (smx_simcall_t simcall, smx_process_t process)
 
void SIMIX_process_resume (smx_process_t process, smx_process_t issuer)
 
int SIMIX_process_get_maxpid (void)
 
int SIMIX_process_count (void)
 
int SIMIX_process_get_PID (smx_process_t self)
 
int SIMIX_process_get_PPID (smx_process_t self)
 
voidSIMIX_process_self_get_data ()
 
void SIMIX_process_self_set_data (void *data)
 
voidSIMIX_process_get_data (smx_process_t process)
 
void SIMIX_process_set_data (smx_process_t process, void *data)
 
sg_host_t SIMIX_process_get_host (smx_process_t process)
 
xbt_main_func_t SIMIX_process_get_code (void)
 
const char * SIMIX_process_self_get_name (void)
 
const char * SIMIX_process_get_name (smx_process_t process)
 
smx_process_t SIMIX_process_get_by_name (const char *name)
 
int SIMIX_process_is_suspended (smx_process_t process)
 
xbt_dict_t SIMIX_process_get_properties (smx_process_t process)
 
void simcall_HANDLER_process_join (smx_simcall_t simcall, smx_process_t process, double timeout)
 
static int SIMIX_process_join_finish (smx_process_exit_status_t status, smx_synchro_t sync)
 
smx_synchro_t SIMIX_process_join (smx_process_t issuer, smx_process_t process, double timeout)
 
void simcall_HANDLER_process_sleep (smx_simcall_t simcall, double duration)
 
smx_synchro_t SIMIX_process_sleep (smx_process_t process, double duration)
 
void SIMIX_post_process_sleep (smx_synchro_t synchro)
 
void SIMIX_process_sleep_destroy (smx_synchro_t synchro)
 
void SIMIX_process_sleep_suspend (smx_synchro_t synchro)
 
void SIMIX_process_sleep_resume (smx_synchro_t synchro)
 
void SIMIX_process_yield (smx_process_t self)
 Calling this function makes the process to yield. More...
 
xbt_running_ctx_tSIMIX_process_get_running_context (void)
 
void SIMIX_process_exception_terminate (xbt_ex_t *e)
 
smx_context_t SIMIX_process_get_context (smx_process_t p)
 
void SIMIX_process_set_context (smx_process_t p, smx_context_t c)
 
xbt_dynar_t SIMIX_process_get_runnable (void)
 Returns the list of processes to run. More...
 
smx_process_t SIMIX_process_from_PID (int PID)
 Returns the process from PID. More...
 
xbt_dynar_t SIMIX_processes_as_dynar (void)
 returns a dynar containg all currently existing processes More...
 
void SIMIX_process_on_exit_runall (smx_process_t process)
 
void SIMIX_process_on_exit (smx_process_t process, int_f_pvoid_pvoid_t fun, void *data)
 
void SIMIX_process_auto_restart_set (smx_process_t process, int auto_restart)
 Sets the auto-restart status of the process. More...
 
smx_process_t simcall_HANDLER_process_restart (smx_simcall_t simcall, smx_process_t process)
 
smx_process_t SIMIX_process_restart (smx_process_t process, smx_process_t issuer)
 Restart a process, starting it again from the beginning. More...
 
void SIMIX_segment_index_set (smx_process_t proc, int index)
 

Variables

unsigned long simix_process_maxpid = 0
 

Function Documentation

XBT_LOG_NEW_DEFAULT_SUBCATEGORY ( simix_process  ,
simix  ,
"Logging specific to SIMIX (process)"   
)
smx_process_t SIMIX_process_self ( void  )

Returns the current agent.

This functions returns the currently running SIMIX process.

Returns
The SIMIX process
int SIMIX_process_has_pending_comms ( smx_process_t  process)

Returns whether a process has pending asynchronous communications.

Returns
true if there are asynchronous communications in this process
void SIMIX_process_cleanup ( smx_process_t  process)

Moves a process to the list of processes to destroy.

void SIMIX_process_empty_trash ( void  )

Garbage collection.

Should be called some time to time to free the memory allocated for processes that have finished (or killed).

void SIMIX_maestro_create ( void(*)(void *)  code,
void data 
)

Creates and runs the maestro process.

void SIMIX_process_stop ( smx_process_t  arg)

Stops a process.

Stops the process, execute all the registered on_exit functions, register it to the list of the process to restart if needed and stops its context.

smx_process_t SIMIX_process_create_from_wrapper ( smx_process_arg_t  args)

Same as SIMIX_process_create() but with only one argument (used by timers).

This function frees the argument.

Returns
the process created
void* simcall_HANDLER_process_create ( smx_simcall_t  simcall,
const char *  name,
xbt_main_func_t  code,
void data,
const char *  hostname,
double  kill_time,
int  argc,
char **  argv,
xbt_dict_t  properties,
int  auto_restart 
)
static void kill_process ( void process)
static
smx_process_t SIMIX_process_create ( const char *  name,
xbt_main_func_t  code,
void data,
const char *  hostname,
double  kill_time,
int  argc,
char **  argv,
xbt_dict_t  properties,
int  auto_restart,
smx_process_t  parent_process 
)

Internal function to create a process.

This function actually creates the process. It may be called when a SIMCALL_PROCESS_CREATE simcall occurs, or directly for SIMIX internal purposes. The sure thing is that it's called from maestro context.

Returns
the process created
smx_process_t SIMIX_process_attach ( const char *  name,
void data,
const char *  hostname,
xbt_dict_t  properties,
smx_process_t  parent_process 
)
void SIMIX_process_detach ( void  )
void SIMIX_process_runall ( void  )

Executes the processes from simix_global->process_to_run.

The processes of simix_global->process_to_run are run (in parallel if possible). On exit, simix_global->process_to_run is empty, and simix_global->process_that_ran contains the list of processes that just ran. The two lists are swapped so, be careful when using them before and after a call to this function.

void simcall_HANDLER_process_kill ( smx_simcall_t  simcall,
smx_process_t  process 
)
void SIMIX_process_kill ( smx_process_t  process,
smx_process_t  issuer 
)

Internal function to kill a SIMIX process.

This function may be called when a SIMCALL_PROCESS_KILL simcall occurs, or directly for SIMIX internal purposes.

Parameters
processpoor victim
issuerthe process which has sent the PROCESS_KILL. Important to not schedule twice the same process.
void SIMIX_process_throw ( smx_process_t  process,
xbt_errcat_t  cat,
int  value,
const char *  msg 
)

Ask another process to raise the given exception.

Parameters
catcategory of exception
valuevalue associated to the exception
msgstring information associated to the exception
void simcall_HANDLER_process_killall ( smx_simcall_t  simcall,
int  reset_pid 
)
void SIMIX_process_killall ( smx_process_t  issuer,
int  reset_pid 
)

Kills all running processes.

Parameters
issuerthis one will not be killed
void simcall_HANDLER_process_set_host ( smx_simcall_t  simcall,
smx_process_t  process,
sg_host_t  dest 
)
void SIMIX_process_change_host ( smx_process_t  process,
sg_host_t  dest 
)
void simcall_HANDLER_process_suspend ( smx_simcall_t  simcall,
smx_process_t  process 
)
smx_synchro_t SIMIX_process_suspend ( smx_process_t  process,
smx_process_t  issuer 
)
void simcall_HANDLER_process_resume ( smx_simcall_t  simcall,
smx_process_t  process 
)
void SIMIX_process_resume ( smx_process_t  process,
smx_process_t  issuer 
)
int SIMIX_process_get_maxpid ( void  )
int SIMIX_process_count ( void  )
int SIMIX_process_get_PID ( smx_process_t  self)
int SIMIX_process_get_PPID ( smx_process_t  self)
void* SIMIX_process_self_get_data ( void  )
void SIMIX_process_self_set_data ( void data)
void* SIMIX_process_get_data ( smx_process_t  process)
void SIMIX_process_set_data ( smx_process_t  process,
void data 
)
sg_host_t SIMIX_process_get_host ( smx_process_t  process)
xbt_main_func_t SIMIX_process_get_code ( void  )
const char* SIMIX_process_self_get_name ( void  )
const char* SIMIX_process_get_name ( smx_process_t  process)
smx_process_t SIMIX_process_get_by_name ( const char *  name)
int SIMIX_process_is_suspended ( smx_process_t  process)
xbt_dict_t SIMIX_process_get_properties ( smx_process_t  process)
void simcall_HANDLER_process_join ( smx_simcall_t  simcall,
smx_process_t  process,
double  timeout 
)
static int SIMIX_process_join_finish ( smx_process_exit_status_t  status,
smx_synchro_t  sync 
)
static
smx_synchro_t SIMIX_process_join ( smx_process_t  issuer,
smx_process_t  process,
double  timeout 
)
void simcall_HANDLER_process_sleep ( smx_simcall_t  simcall,
double  duration 
)
smx_synchro_t SIMIX_process_sleep ( smx_process_t  process,
double  duration 
)
void SIMIX_post_process_sleep ( smx_synchro_t  synchro)
void SIMIX_process_sleep_destroy ( smx_synchro_t  synchro)
void SIMIX_process_sleep_suspend ( smx_synchro_t  synchro)
void SIMIX_process_sleep_resume ( smx_synchro_t  synchro)
void SIMIX_process_yield ( smx_process_t  self)

Calling this function makes the process to yield.

Only the current process can call this function, giving back the control to maestro.

Parameters
selfthe current process
xbt_running_ctx_t* SIMIX_process_get_running_context ( void  )
void SIMIX_process_exception_terminate ( xbt_ex_t e)
smx_context_t SIMIX_process_get_context ( smx_process_t  p)
void SIMIX_process_set_context ( smx_process_t  p,
smx_context_t  c 
)
xbt_dynar_t SIMIX_process_get_runnable ( void  )

Returns the list of processes to run.

smx_process_t SIMIX_process_from_PID ( int  PID)

Returns the process from PID.

xbt_dynar_t SIMIX_processes_as_dynar ( void  )

returns a dynar containg all currently existing processes

void SIMIX_process_on_exit_runall ( smx_process_t  process)
void SIMIX_process_on_exit ( smx_process_t  process,
int_f_pvoid_pvoid_t  fun,
void data 
)
void SIMIX_process_auto_restart_set ( smx_process_t  process,
int  auto_restart 
)

Sets the auto-restart status of the process.

If set to 1, the process will be automatically restarted when its host comes back.

smx_process_t simcall_HANDLER_process_restart ( smx_simcall_t  simcall,
smx_process_t  process 
)
smx_process_t SIMIX_process_restart ( smx_process_t  process,
smx_process_t  issuer 
)

Restart a process, starting it again from the beginning.

void SIMIX_segment_index_set ( smx_process_t  proc,
int  index 
)

Variable Documentation

unsigned long simix_process_maxpid = 0