Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Implement remote support for MC_ignore
[simgrid.git] / src / mc / mc_process.c
index b4aace4..10d0a45 100644 (file)
@@ -21,6 +21,8 @@
 #include "mc_object_info.h"
 #include "mc_address_space.h"
 #include "mc_unw.h"
+#include "mc_snapshot.h"
+#include "mc_ignore.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_process, mc,
                                 "MC process information");
@@ -28,6 +30,10 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_process, mc,
 static void MC_process_init_memory_map_info(mc_process_t process);
 static void MC_process_open_memory_file(mc_process_t process);
 
+// ***** Destructor callbacks
+
+// ***** mc_address_space methods for mc_process
+
 static mc_process_t MC_process_get_process(mc_process_t p) {
   return p;
 }
@@ -42,13 +48,18 @@ bool MC_is_process(mc_address_space_t p)
   return p->address_space_class == &mc_process_class;
 }
 
-void MC_process_init(mc_process_t process, pid_t pid)
+// ***** mc_process
+
+void MC_process_init(mc_process_t process, pid_t pid, int sockfd)
 {
   process->address_space.address_space_class = &mc_process_class;
   process->process_flags = MC_PROCESS_NO_FLAG;
+  process->socket = sockfd;
   process->pid = pid;
   if (pid==getpid())
     process->process_flags |= MC_PROCESS_SELF_FLAG;
+  process->running = true;
+  process->status = 0;
   process->memory_map = MC_get_memory_map(pid);
   process->memory_file = -1;
   process->cache_flags = 0;
@@ -67,6 +78,8 @@ void MC_process_init(mc_process_t process, pid_t pid)
     &process->heap_address, std_heap_var->address, sizeof(struct mdesc*),
     MC_PROCESS_INDEX_DISABLED);
 
+  process->checkpoint_ignore = MC_checkpoint_ignore_new();
+
   process->unw_addr_space = unw_create_addr_space(&mc_unw_accessors  , __BYTE_ORDER);
   if (process->process_flags & MC_PROCESS_SELF_FLAG) {
     process->unw_underlying_addr_space = unw_local_addr_space;
@@ -89,6 +102,8 @@ void MC_process_clear(mc_process_t process)
   process->maestro_stack_start = NULL;
   process->maestro_stack_end = NULL;
 
+  xbt_dynar_free(&process->checkpoint_ignore);
+
   size_t i;
   for (i=0; i!=process->object_infos_size; ++i) {
     MC_free_object_info(&process->object_infos[i]);
@@ -222,7 +237,7 @@ static char* MC_get_lib_name(const char* pathname, struct s_mc_memory_map_re* re
 /** @brief Finds the range of the different memory segments and binary paths */
 static void MC_process_init_memory_map_info(mc_process_t process)
 {
-  XBT_INFO("Get debug information ...");
+  XBT_DEBUG("Get debug information ...");
   process->maestro_stack_start = NULL;
   process->maestro_stack_end = NULL;
   process->object_infos = NULL;
@@ -299,10 +314,10 @@ static void MC_process_init_memory_map_info(mc_process_t process)
   for (i=0; i!=process->object_infos_size; ++i)
     MC_post_process_object_info(process, process->object_infos[i]);
 
-  xbt_assert(process->maestro_stack_start, "maestro_stack_start");
-  xbt_assert(process->maestro_stack_end, "maestro_stack_end");
+  xbt_assert(process->maestro_stack_start, "Did not find maestro_stack_start");
+  xbt_assert(process->maestro_stack_end, "Did not find maestro_stack_end");
 
-  XBT_INFO("Get debug information done !");
+  XBT_DEBUG("Get debug information done !");
 }
 
 mc_object_info_t MC_process_find_object_info(mc_process_t process, const void *addr)