-/* Copyright (c) 2010, 2012-2013. The SimGrid Team.
+/* Copyright (c) 2010, 2012-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
+ * under the terms of the license (GNU LGPL) which comes with this package. */
#include "msg_private.h"
-
-#include "msg/datatypes.h"
#include "simix/smx_process_private.h"
-#ifdef HAVE_TRACING
-
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_process, instr, "MSG process");
char *instr_process_id (msg_process_t proc, char *str, int len)
int len = INSTR_DEFAULT_STR_SIZE;
char str[INSTR_DEFAULT_STR_SIZE];
- container_t process = PJ_container_get (instr_process_id_2 (process_name, process_pid, str, len));
- PJ_container_remove_from_parent (process);
- PJ_container_free (process);
+ // Avoids multiple destroys of the same process
+ container_t process = PJ_container_get_or_null (instr_process_id_2 (process_name, process_pid, str, len));
+ if (process){
+ PJ_container_remove_from_parent (process);
+ PJ_container_free (process);
+ }
}
-void TRACE_msg_process_kill(msg_process_t process)
+void TRACE_msg_process_kill(smx_process_exit_status_t status, msg_process_t process)
{
- if (TRACE_msg_process_is_enabled()){
+ 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 (MSG_process_get_name (process), MSG_process_get_PID (process), MSG_process_get_host (process));
+ TRACE_msg_process_destroy(MSG_process_get_name (process), MSG_process_get_PID (process), MSG_process_get_host (process));
}
}
void TRACE_msg_process_end(msg_process_t process)
{
if (TRACE_msg_process_is_enabled()) {
- int len = INSTR_DEFAULT_STR_SIZE;
- char str[INSTR_DEFAULT_STR_SIZE];
-
//that's the end, let's destroy it
- container_t container = PJ_container_get (instr_process_id(process, str, len));
- PJ_container_remove_from_parent (container);
- PJ_container_free (container);
+ TRACE_msg_process_destroy(MSG_process_get_name (process), MSG_process_get_PID (process), MSG_process_get_host (process));
}
}
-
-#endif /* HAVE_TRACING */