X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d7d25ee1e33a01d3655723cbe4c8e0a77ea60712..3203ed1f4fb6f4617e94d5351661ba07e8b8f833:/src/simix/smx_process.c diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index 02e70b43f3..2fac9cf337 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2014. The SimGrid Team. +/* Copyright (c) 2007-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -9,8 +9,8 @@ #include "xbt/log.h" #include "xbt/dict.h" #include "mc/mc.h" -#include "mc/mc_replay.h" -#include "mc/mc_client.h" +#include "src/mc/mc_replay.h" +#include "src/mc/mc_client.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix, "Logging specific to SIMIX (process)"); @@ -96,7 +96,7 @@ void SIMIX_process_cleanup(smx_process_t process) XBT_DEBUG("%p should not be run anymore",process); xbt_swag_remove(process, simix_global->process_list); - xbt_swag_remove(process, SIMIX_host_priv(process->smx_host)->process_list); + xbt_swag_remove(process, sg_host_simix(process->host)->process_list); xbt_swag_insert(process, simix_global->process_to_destroy); process->context->iwannadie = 0; @@ -163,14 +163,14 @@ void SIMIX_process_stop(smx_process_t arg) { /* Add the process to the list of process to restart, only if * the host is down */ - if (arg->auto_restart && !SIMIX_host_get_state(arg->smx_host)) { - SIMIX_host_add_auto_restart_process(arg->smx_host,arg->name,arg->code, arg->data, - sg_host_name(arg->smx_host), + if (arg->auto_restart && !SIMIX_host_get_state(arg->host)) { + SIMIX_host_add_auto_restart_process(arg->host,arg->name,arg->code, arg->data, + sg_host_name(arg->host), SIMIX_timer_get_date(arg->kill_timer), arg->argc,arg->argv,arg->properties, arg->auto_restart); } - XBT_DEBUG("Process %s (%s) is dead",arg->name,sg_host_name(arg->smx_host)); + XBT_DEBUG("Process %s (%s) is dead",arg->name,sg_host_name(arg->host)); /* stop the context */ SIMIX_context_stop(arg->context); } @@ -182,8 +182,7 @@ void SIMIX_process_stop(smx_process_t arg) { */ smx_process_t SIMIX_process_create_from_wrapper(smx_process_arg_t args) { - smx_process_t process; - simix_global->create_process_function(&process, + smx_process_t process = simix_global->create_process_function( args->name, args->code, args->data, @@ -199,8 +198,7 @@ smx_process_t SIMIX_process_create_from_wrapper(smx_process_arg_t args) { } -void simcall_HANDLER_process_create(smx_simcall_t simcall, - smx_process_t *process, +void* simcall_HANDLER_process_create(smx_simcall_t simcall, const char *name, xbt_main_func_t code, void *data, @@ -209,7 +207,7 @@ void simcall_HANDLER_process_create(smx_simcall_t simcall, int argc, char **argv, xbt_dict_t properties, int auto_restart){ - SIMIX_process_create(process, name, code, data, hostname, + return (void*)SIMIX_process_create(name, code, data, hostname, kill_time, argc, argv, properties, auto_restart, simcall->issuer); } @@ -222,7 +220,7 @@ void simcall_HANDLER_process_create(smx_simcall_t simcall, * * \return the process created */ -void SIMIX_process_create(smx_process_t *process, +smx_process_t SIMIX_process_create( const char *name, xbt_main_func_t code, void *data, @@ -233,8 +231,8 @@ void SIMIX_process_create(smx_process_t *process, int auto_restart, smx_process_t parent_process) { - *process = NULL; - smx_host_t host = SIMIX_host_get_by_name(hostname); + smx_process_t process = NULL; + sg_host_t host = sg_host_by_name(hostname); XBT_DEBUG("Start process %s on host '%s'", name, hostname); @@ -247,60 +245,60 @@ void SIMIX_process_create(smx_process_t *process, xbt_free(argv); } else { - *process = xbt_new0(s_smx_process_t, 1); + process = xbt_new0(s_smx_process_t, 1); xbt_assert(((code != NULL) && (host != NULL)), "Invalid parameters"); /* Process data */ - (*process)->pid = simix_process_maxpid++; - (*process)->name = xbt_strdup(name); - (*process)->smx_host = host; - (*process)->data = data; - (*process)->comms = xbt_fifo_new(); - (*process)->simcall.issuer = *process; + process->pid = simix_process_maxpid++; + process->name = xbt_strdup(name); + process->host = host; + process->data = data; + process->comms = xbt_fifo_new(); + process->simcall.issuer = process; if (parent_process) { - (*process)->ppid = SIMIX_process_get_PID(parent_process); + process->ppid = SIMIX_process_get_PID(parent_process); } else { - (*process)->ppid = -1; + process->ppid = -1; } /* Process data for auto-restart */ - (*process)->auto_restart = auto_restart; - (*process)->code = code; - (*process)->argc = argc; - (*process)->argv = argv; + process->auto_restart = auto_restart; + process->code = code; + process->argc = argc; + process->argv = argv; - XBT_VERB("Create context %s", (*process)->name); - (*process)->context = SIMIX_context_new(code, argc, argv, - simix_global->cleanup_process_function, *process); + XBT_VERB("Create context %s", process->name); + process->context = SIMIX_context_new(code, argc, argv, simix_global->cleanup_process_function, process); - (*process)->running_ctx = xbt_new(xbt_running_ctx_t, 1); - XBT_RUNNING_CTX_INITIALIZE((*process)->running_ctx); + process->running_ctx = xbt_new(xbt_running_ctx_t, 1); + XBT_RUNNING_CTX_INITIALIZE(process->running_ctx); if(MC_is_active()){ - MC_ignore_heap((*process)->running_ctx, sizeof(*(*process)->running_ctx)); + MC_ignore_heap(process->running_ctx, sizeof(*process->running_ctx)); } /* Add properties */ - (*process)->properties = properties; + process->properties = properties; /* Add the process to it's host process list */ - xbt_swag_insert(*process, SIMIX_host_priv(host)->process_list); + xbt_swag_insert(process, sg_host_simix(host)->process_list); - XBT_DEBUG("Start context '%s'", (*process)->name); + XBT_DEBUG("Start context '%s'", process->name); /* Now insert it in the global process list and in the process to run list */ - xbt_swag_insert(*process, simix_global->process_list); - XBT_DEBUG("Inserting %s(%s) in the to_run list", (*process)->name, sg_host_name(host)); - xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, *process); + xbt_swag_insert(process, simix_global->process_list); + XBT_DEBUG("Inserting %s(%s) in the to_run list", process->name, sg_host_name(host)); + xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, process); if (kill_time > SIMIX_get_clock() && simix_global->kill_process_function) { - XBT_DEBUG("Process %s(%s) will be kill at time %f", (*process)->name, - sg_host_name((*process)->smx_host), kill_time); - (*process)->kill_timer = SIMIX_timer_set(kill_time, simix_global->kill_process_function, *process); + XBT_DEBUG("Process %s(%s) will be kill at time %f", process->name, + sg_host_name(process->host), kill_time); + process->kill_timer = SIMIX_timer_set(kill_time, simix_global->kill_process_function, process); } } + return process; } /** @@ -336,7 +334,7 @@ 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) { - XBT_DEBUG("Killing process %s on %s", process->name, sg_host_name(process->smx_host)); + XBT_DEBUG("Killing process %s on %s", process->name, sg_host_name(process->host)); process->context->iwannadie = 1; process->blocked = 0; @@ -350,7 +348,7 @@ void SIMIX_process_kill(smx_process_t process, smx_process_t issuer) { case SIMIX_SYNC_EXECUTE: case SIMIX_SYNC_PARALLEL_EXECUTE: - SIMIX_host_execution_destroy(process->waiting_synchro); + SIMIX_process_execution_destroy(process->waiting_synchro); break; case SIMIX_SYNC_COMMUNICATE: @@ -407,7 +405,7 @@ void SIMIX_process_throw(smx_process_t process, xbt_errcat_t cat, int value, con case SIMIX_SYNC_EXECUTE: case SIMIX_SYNC_PARALLEL_EXECUTE: - SIMIX_host_execution_cancel(process->waiting_synchro); + SIMIX_process_execution_cancel(process->waiting_synchro); break; case SIMIX_SYNC_COMMUNICATE: @@ -463,18 +461,17 @@ void SIMIX_process_killall(smx_process_t issuer, int reset_pid) SIMIX_process_empty_trash(); } -void simcall_HANDLER_process_change_host(smx_simcall_t simcall, smx_process_t process, - smx_host_t dest) +void simcall_HANDLER_process_set_host(smx_simcall_t simcall, smx_process_t process, sg_host_t dest) { process->new_host = dest; } void SIMIX_process_change_host(smx_process_t process, - smx_host_t dest) + sg_host_t dest) { xbt_assert((process != NULL), "Invalid parameters"); - xbt_swag_remove(process, SIMIX_host_priv(process->smx_host)->process_list); - process->smx_host = dest; - xbt_swag_insert(process, SIMIX_host_priv(dest)->process_list); + xbt_swag_remove(process, sg_host_simix(process->host)->process_list); + process->host = dest; + xbt_swag_insert(process, sg_host_simix(dest)->process_list); } @@ -540,7 +537,7 @@ smx_synchro_t SIMIX_process_suspend(smx_process_t process, smx_process_t issuer) } } else { /* FIXME: computation size is zero. Is it okay that bound is zero ? */ - return SIMIX_host_execute("suspend", process->smx_host, 0.0, 1.0, 0.0, 0); + return SIMIX_process_execute(process, "suspend", 0.0, 1.0, 0.0, 0); } } @@ -646,9 +643,9 @@ void SIMIX_process_set_data(smx_process_t process, void *data) process->data = data; } -smx_host_t SIMIX_process_get_host(smx_process_t process) +sg_host_t SIMIX_process_get_host(smx_process_t process) { - return process->smx_host; + return process->host; } /* needs to be public and without simcall because it is called @@ -743,10 +740,10 @@ void simcall_HANDLER_process_sleep(smx_simcall_t simcall, double duration) smx_synchro_t SIMIX_process_sleep(smx_process_t process, double duration) { smx_synchro_t synchro; - smx_host_t host = process->smx_host; + sg_host_t host = process->host; /* check if the host is active */ - if (surf_resource_get_state(surf_workstation_resource_priv(host)) != SURF_RESOURCE_ON) { + if (surf_host_get_state(surf_host_resource_priv(host)) != SURF_RESOURCE_ON) { THROWF(host_error, 0, "Host %s failed, you cannot call this function", sg_host_name(host)); } @@ -757,8 +754,7 @@ smx_synchro_t SIMIX_process_sleep(smx_process_t process, double duration) synchro->category = NULL; synchro->sleep.host = host; - synchro->sleep.surf_sleep = - surf_workstation_sleep(host, duration); + synchro->sleep.surf_sleep = surf_host_sleep(host, duration); surf_action_set_data(synchro->sleep.surf_sleep, synchro); XBT_DEBUG("Create sleep synchronization %p", synchro); @@ -789,7 +785,7 @@ void SIMIX_post_process_sleep(smx_synchro_t synchro) THROW_IMPOSSIBLE; break; } - if (surf_resource_get_state(surf_workstation_resource_priv(simcall->issuer->smx_host)) != SURF_RESOURCE_ON) { + if (surf_host_get_state(surf_host_resource_priv(simcall->issuer->host)) != SURF_RESOURCE_ON) { simcall->issuer->context->iwannadie = 1; } simcall_process_sleep__set__result(simcall, state); @@ -965,12 +961,12 @@ smx_process_t simcall_HANDLER_process_restart(smx_simcall_t simcall, smx_process } /** @brief Restart a process, starting it again from the beginning. */ smx_process_t SIMIX_process_restart(smx_process_t process, smx_process_t issuer) { - XBT_DEBUG("Restarting process %s on %s", process->name, sg_host_name(process->smx_host)); + XBT_DEBUG("Restarting process %s on %s", process->name, sg_host_name(process->host)); //retrieve the arguments of the old process //FIXME: Factorize this with SIMIX_host_add_auto_restart_process ? s_smx_process_arg_t arg; arg.code = process->code; - arg.hostname = sg_host_name(process->smx_host); + arg.hostname = sg_host_name(process->host); arg.kill_time = SIMIX_timer_get_date(process->kill_timer); arg.argc = process->argc; arg.data = process->data; @@ -987,7 +983,7 @@ smx_process_t SIMIX_process_restart(smx_process_t process, smx_process_t issuer) //start the new process smx_process_t new_process; if (simix_global->create_process_function) { - simix_global->create_process_function(&new_process, + new_process = simix_global->create_process_function( arg.argv[0], arg.code, arg.data, @@ -999,7 +995,7 @@ smx_process_t SIMIX_process_restart(smx_process_t process, smx_process_t issuer) arg.auto_restart, NULL); } else { - simcall_process_create(&new_process, + new_process = simcall_process_create( arg.argv[0], arg.code, arg.data,