X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3e650953e3a2b3adb8ec8c194d7e520ba721cc5b..8575a5a1e9aefbfd90d2d16e0fa920d364b6f461:/src/mc/mc_checkpoint.c diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index 53c64dc73c..3e96454766 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -88,8 +88,9 @@ static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size) new_reg->start_addr = start_addr; new_reg->size = size; new_reg->data = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); + if(new_reg->data==MAP_FAILED) + xbt_die("Could not mmap new memory for snapshot."); memcpy(new_reg->data, start_addr, size); - mprotect(new_reg->data, size, PROT_READ); madvise(new_reg->data, size, MADV_MERGEABLE); XBT_DEBUG("New region : type : %d, data : %p (real addr %p), size : %zu", type, new_reg->data, start_addr, size); @@ -497,6 +498,13 @@ mc_snapshot_t MC_take_snapshot(int num_state){ if(num_state > 0) MC_dump_checkpoint_ignore(snapshot); + // mprotect the region after zero-ing ignored parts: + size_t i; + for(i=0; i!=NB_REGIONS; ++i) { + mc_mem_region_t region = snapshot->regions[i]; + mprotect(region->data, region->size, PROT_READ); + } + return snapshot; }