Fix free memory size
The original free memory size is incorrect, fixed via using unit size
and last unit size.
Signed-off-by: Huang Ying <ying.huang@intel.com>
diff --git a/usemem.c b/usemem.c
index f0807bd..867624f 100644
--- a/usemem.c
+++ b/usemem.c
@@ -390,7 +390,8 @@
return p;
}
-void free_memory(void *ptrs[], unsigned int nptr, unsigned long bytes)
+void free_memory(void *ptrs[], unsigned int nptr,
+ unsigned long unit, unsigned long last_unit)
{
unsigned int i;
@@ -398,7 +399,7 @@
if (opt_malloc)
free(ptrs[i]);
else
- munmap(ptrs[i], bytes);
+ munmap(ptrs[i], i == nptr - 1 ? last_unit : unit);
}
}
@@ -676,13 +677,14 @@
write(1, buf, len);
}
-static void timing_free(void *ptrs[], unsigned int nptr, unsigned long bytes)
+static void timing_free(void *ptrs[], unsigned int nptr,
+ unsigned long unit, unsigned long last_unit)
{
struct timeval start, stop;
unsigned long delta_us;
gettimeofday(&start, NULL);
- free_memory(ptrs, nptr, bytes);
+ free_memory(ptrs, nptr, unit, last_unit);
gettimeofday(&stop, NULL);
delta_us = (stop.tv_sec - start.tv_sec) * 1000000 +
(stop.tv_usec - start.tv_usec);
@@ -696,6 +698,7 @@
struct drand48_data rand_data;
unsigned long unit_bytes = done_bytes;
unsigned long bytes = opt_bytes;
+ unsigned long last_unit;
void *ptrs[MAX_POINTERS];
unsigned int nptr = 0;
@@ -722,6 +725,7 @@
unit_bytes += do_unit(size, &rand_data,
nptr < MAX_POINTERS ? &ptrs[nptr] : NULL);
nptr++;
+ last_unit = size;
bytes -= size;
if (runtime_exceeded())
break;
@@ -757,7 +761,7 @@
}
if (!prealloc && nptr <= MAX_POINTERS)
- timing_free(ptrs, nptr, bytes);
+ timing_free(ptrs, nptr, unit, last_unit);
return 0;
}