Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Implement remote support for MC_ignore
[simgrid.git] / src / mc / mc_client.c
index 55cc2ca..c903246 100644 (file)
 
 #include <xbt/log.h>
 #include <xbt/sysdep.h>
+#include <xbt/mmalloc.h>
 
 #include "mc_protocol.h"
 #include "mc_client.h"
 
+// We won't need those once the separation MCer/MCed is complete:
+#include "mc_mmalloc.h"
+#include "mc_ignore.h"
+#include "mc_model_checker.h"
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_client, mc, "MC client logic");
 
 mc_client_t mc_client;
@@ -56,6 +62,12 @@ void MC_client_hello(void)
   XBT_DEBUG("Greeted the MC server");
 }
 
+void MC_client_send_message(void* message, size_t size)
+{
+  if (MC_protocol_send(mc_client->fd, message, size))
+    xbt_die("Could not send message %i", (int) ((mc_message_t)message)->type);
+}
+
 void MC_client_handle_messages(void)
 {
   while (1) {
@@ -80,3 +92,21 @@ void MC_client_handle_messages(void)
     }
   }
 }
+
+void MC_ignore(void* addr, size_t size)
+{
+  if (mc_mode == MC_MODE_CLIENT) {
+    s_mc_ignore_memory_message_t message;
+    message.type = MC_MESSAGE_IGNORE_MEMORY;
+    message.addr = addr;
+    message.size = size;
+    MC_client_send_message(&message, sizeof(message));
+  }
+
+  // TODO, remove this once the migration has been completed
+  int raw_mem_set = (mmalloc_get_current_heap() == mc_heap);
+  MC_SET_MC_HEAP;
+  MC_process_ignore_memory(&mc_model_checker->process, addr, size);
+  if (!raw_mem_set)
+    MC_SET_STD_HEAP;
+}