X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dff9e15c44ab6340d27215957c56fa72fad246a2..ff3cdbac76f96b8a8f7f5ba4e3b8d5a737625348:/src/gras/Virtu/sg_process.c diff --git a/src/gras/Virtu/sg_process.c b/src/gras/Virtu/sg_process.c index 85148457fd..bc39cf2c7a 100644 --- a/src/gras/Virtu/sg_process.c +++ b/src/gras/Virtu/sg_process.c @@ -96,9 +96,16 @@ void gras_process_exit() VERB2("GRAS: Finalizing process '%s' (%d)", SIMIX_process_get_name(SIMIX_process_self()), gras_os_getpid()); - if (xbt_dynar_length(msg_pd->msg_queue)) - WARN1("process %d terminated, but some messages are still queued", - gras_os_getpid()); + if (xbt_dynar_length(msg_pd->msg_queue)) { + unsigned int cpt; + s_gras_msg_t msg; + WARN2("process %d terminated, but %ld messages are still queued. Message list:", + gras_os_getpid(),xbt_dynar_length(msg_pd->msg_queue)); + xbt_dynar_foreach(msg_pd->msg_queue,cpt, msg) { + WARN5(" Message %s (%s) from %s@%s:%d",msg.type->name,e_gras_msg_kind_names[msg.kind], + gras_socket_peer_proc(msg.expe),gras_socket_peer_name(msg.expe),gras_socket_peer_port(msg.expe)); + } + } /* if each process has its sockets list, we need to close them when the process finish */ @@ -163,28 +170,35 @@ xbt_dict_t gras_process_properties(void) const char *xbt_procname(void) { - const char *res = NULL; smx_process_t process = SIMIX_process_self(); - if ((process != NULL) && (process->simdata)) - res = SIMIX_process_get_name(process); - if (res) - return res; - else - return ""; + /*FIXME: maestro used not have a simix process, now it does so + SIMIX_process_self will return something different to NULL. This breaks + the old xbt_log logic that assumed that NULL was equivalent to maestro, + thus when printing it searches for maestro host name (which doesn't exists) + and breaks the logging. + As a hack we check for maestro by looking to the assigned host, if it is + NULL then we are sure is maestro + */ + if (process != NULL && SIMIX_host_self()) + return SIMIX_process_get_name(process); + + return ""; } int gras_os_getpid(void) { - + gras_procdata_t *data; smx_process_t process = SIMIX_process_self(); - - if ((process != NULL) && (process->data)) - return ((gras_procdata_t *) process->data)->pid; - else - return 0; + + if (process != NULL){ + data = (gras_procdata_t *)SIMIX_process_get_data(process); + if(data != NULL) + return data->pid; + } + + return 0; } - /** @brief retrieve the value of a given host property (or NULL if not defined) */ const char *gras_os_host_property_value(const char *name) { @@ -229,37 +243,13 @@ void gras_function_register(const char *name, xbt_main_func_t code) void gras_main() { - smx_cond_t cond = NULL; - smx_action_t action; - xbt_fifo_t actions_done = xbt_fifo_new(); - xbt_fifo_t actions_failed = xbt_fifo_new(); - /* Clean IO before the run */ fflush(stdout); fflush(stderr); SIMIX_init(); - while (SIMIX_solve(actions_done, actions_failed) != -1.0) { - while ((action = xbt_fifo_pop(actions_failed))) { - DEBUG1("** %s failed **", action->name); - while ((cond = xbt_fifo_pop(action->cond_list))) { - SIMIX_cond_broadcast(cond); - } - /* action finished, destroy it */ - // SIMIX_action_destroy(action); - } - - while ((action = xbt_fifo_pop(actions_done))) { - DEBUG1("** %s done **", action->name); - while ((cond = xbt_fifo_pop(action->cond_list))) { - SIMIX_cond_broadcast(cond); - } - /* action finished, destroy it */ - //SIMIX_action_destroy(action); - } - } - xbt_fifo_free(actions_failed); - xbt_fifo_free(actions_done); + while (SIMIX_solve(NULL, NULL) != -1.0); + return; }