Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Fix bug in Snapshot::read_bytes
authorGabriel Corona <gabriel.corona@loria.fr>
Tue, 19 May 2015 08:23:31 +0000 (10:23 +0200)
committerGabriel Corona <gabriel.corona@loria.fr>
Thu, 21 May 2015 09:35:04 +0000 (11:35 +0200)
MC_region_read is allowed to return a pointer to another buffer containing the data.
We have to handle this case.

src/mc/mc_snapshot.cpp

index 345e23b..cd0ffaa 100644 (file)
@@ -187,8 +187,15 @@ const void* Snapshot::read_bytes(void* buffer, std::size_t size,
   AddressSpace::ReadMode mode)
 {
   mc_mem_region_t region = mc_get_snapshot_region((void*)address, this, process_index);
   AddressSpace::ReadMode mode)
 {
   mc_mem_region_t region = mc_get_snapshot_region((void*)address, this, process_index);
-  if (region)
-    return MC_region_read(region, buffer, (void*)address, size);
+  if (region) {
+    const void* res = MC_region_read(region, buffer, (void*)address, size);
+    if (buffer == res || mode == AddressSpace::Lazy)
+      return res;
+    else {
+      memcpy(buffer, res, size);
+      return buffer;
+    }
+  }
   else
     return MC_process_read(this->process, mode, buffer, (void*)address, size, process_index);
 }
   else
     return MC_process_read(this->process, mode, buffer, (void*)address, size, process_index);
 }