+
+ process->cache_flags = 0;
+
+ free(process->heap);
+ process->heap = NULL;
+
+ free(process->heap_info);
+ process->heap_info = NULL;
+}
+
+void MC_process_refresh_heap(mc_process_t process)
+{
+ assert(!MC_process_is_self(process));
+ // Read/dereference/refresh the std_heap pointer:
+ if (!process->heap) {
+ xbt_mheap_t oldheap = mmalloc_get_current_heap();
+ MC_SET_MC_HEAP;
+ process->heap = malloc(sizeof(struct mdesc));
+ mmalloc_set_current_heap(oldheap);
+ }
+ MC_process_read(process, process->heap,
+ process->heap_address, sizeof(struct mdesc));
+}
+
+void MC_process_refresh_malloc_info(mc_process_t process)
+{
+ assert(!MC_process_is_self(process));
+ if (!process->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP)
+ MC_process_refresh_heap(process);
+ // Refresh process->heapinfo:
+ size_t malloc_info_bytesize = process->heap->heaplimit * sizeof(malloc_info);
+
+ xbt_mheap_t oldheap = mmalloc_get_current_heap();
+ MC_SET_MC_HEAP;
+ process->heap_info = (malloc_info*) realloc(process->heap_info,
+ malloc_info_bytesize);
+ mmalloc_set_current_heap(oldheap);
+
+ MC_process_read(process, process->heap_info,
+ process->heap->heapinfo, malloc_info_bytesize);