/* * Instrumentation functions to trace MSG processes (msg_process_t) */ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host, msg_host_t new_host) { if (TRACE_msg_process_is_enabled()){ static long long int counter = 0; char key[INSTR_DEFAULT_STR_SIZE]; snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++); int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; //start link container_t msg = PJ_container_get (instr_process_id(process, str, len)); type_t type = PJ_type_get ("MSG_PROCESS_LINK", PJ_type_get_root()); new_pajeStartLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); //destroy existing container of this process TRACE_msg_process_destroy (MSG_process_get_name (process), MSG_process_get_PID (process)); //create new container on the new_host location TRACE_msg_process_create (MSG_process_get_name (process), MSG_process_get_PID (process), new_host); //end link msg = PJ_container_get(instr_process_id(process, str, len)); type = PJ_type_get ("MSG_PROCESS_LINK", PJ_type_get_root()); new_pajeEndLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key); } }
void TRACE_msg_process_kill(smx_process_exit_status_t status, msg_process_t process) { if (TRACE_msg_process_is_enabled() && status==SMX_EXIT_FAILURE){ //kill means that this process no longer exists, let's destroy it TRACE_msg_process_destroy(process->name.c_str(), process->pid); } }
void TRACE_msg_process_kill(msg_process_t process) { if (TRACE_msg_process_is_enabled()){ //kill means that this process no longer exists, let's destroy it TRACE_msg_process_destroy (MSG_process_get_name (process), MSG_process_get_PID (process), MSG_process_get_host (process)); } }
/** * \brief Cleans the MSG data of a process. * \param smx_proc a SIMIX process */ void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_proc) { simdata_process_t msg_proc; // get the MSG process from the SIMIX process if (smx_proc == SIMIX_process_self()) { /* avoid a SIMIX request if this function is called by the process itself */ msg_proc = (simdata_process_t) SIMIX_process_self_get_data(); SIMIX_process_self_set_data(nullptr); } else { msg_proc = (simdata_process_t) simcall_process_get_data(smx_proc); simcall_process_set_data(smx_proc, nullptr); } TRACE_msg_process_destroy(smx_proc->name.c_str(), smx_proc->pid); // free the data if a function was provided if (msg_proc && msg_proc->data && msg_global->process_data_cleanup) { msg_global->process_data_cleanup(msg_proc->data); } // free the MSG process xbt_free(msg_proc); SIMIX_process_cleanup(smx_proc); }