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 */
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)
{
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;
}