size_t mmalloc_get_bytes_used(xbt_mheap_t);
ssize_t mmalloc_get_busy_size(xbt_mheap_t, void *ptr);
+void* malloc_no_memset(size_t n);
+
SG_END_DECL()
#endif
/********************************* Memory *************************************/
XBT_PUBLIC(void) MC_memory_init(void); /* Initialize the memory subsystem */
XBT_PUBLIC(void) MC_memory_exit(void);
+XBT_PUBLIC(void) MC_memory_init_server(void);
SG_END_DECL()
#include "xbt_modinter.h"
void MC_memory_exit(void)
{
- if (mc_heap)
+ if (mc_heap && mc_heap != std_heap)
xbt_mheap_destroy(mc_heap);
}
uint64_t* pagemap = NULL;
if (_sg_mc_soft_dirty && mc_model_checker->parent_snapshot &&
MC_process_is_self(process)) {
- pagemap = (uint64_t*) mmalloc_no_memset(mc_heap, sizeof(uint64_t) * page_count);
+ pagemap = (uint64_t*) malloc_no_memset(sizeof(uint64_t) * page_count);
mc_read_pagemap(pagemap, mc_page_number(NULL, permanent_addr), page_count);
}
// Read soft-dirty bits if necessary in order to know which pages have changed:
if (_sg_mc_soft_dirty && mc_model_checker->parent_snapshot
&& MC_process_is_self(process)) {
- pagemap = (uint64_t*) mmalloc_no_memset(mc_heap, sizeof(uint64_t) * page_count);
+ pagemap = (uint64_t*) malloc_no_memset(sizeof(uint64_t) * page_count);
mc_read_pagemap(pagemap, mc_page_number(NULL, reg->permanent_addr), page_count);
}
#include <libunwind.h>
#include <libunwind-ptrace.h>
+#include <xbt/mmalloc.h>
+
#include "mc_process.h"
#include "mc_object_info.h"
#include "mc_address_space.h"
m_lastUpdate = now;
m_lastValue = lmm_variable_getvalue(getVariable());
}
-
}
}
+void* malloc_no_memset(size_t n)
+{
+ if (!__malloc_use_mmalloc) {
+ return mm_real_malloc(n);
+ }
+
+ xbt_mheap_t mdp = GET_HEAP();
+ if (!mdp)
+ return NULL;
+
+ LOCK(mdp);
+ void *ret = mmalloc_no_memset(mdp, n);
+ UNLOCK(mdp);
+ return ret;
+}
+
void *malloc(size_t n)
{
if (!__malloc_use_mmalloc) {