From 658998221e9e8c3de1b6104a234876f21bcbf6ec Mon Sep 17 00:00:00 2001
From: "csander@caltech.edu" <csander@caltech.edu>
Date: Sat, 21 Nov 2020 00:18:13 +0000
Subject: [PATCH] Fix heap clearing being timed

---
 driver/mdriver.c | 6 +++---
 include/memlib.h | 3 ++-
 src/memlib.c     | 8 +++++---
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/driver/mdriver.c b/driver/mdriver.c
index f614db3..3b08ca5 100644
--- a/driver/mdriver.c
+++ b/driver/mdriver.c
@@ -776,7 +776,7 @@ static int eval_mm_valid(trace_t *trace, range_t **ranges)
 	char *p;
 
 	/* Reset the heap and free any records in the range list */
-	mem_reset_brk();
+	mem_reset_brk(true);
 	reinit_trace(trace);
 
 	/* Call the mm package's init function */
@@ -918,7 +918,7 @@ static double eval_mm_util(trace_t *trace, int tracenum)
 	reinit_trace(trace);
 
 	/* initialize the heap and the mm malloc package */
-	mem_reset_brk();
+	mem_reset_brk(false);
 	if (!mm_init()) {
 		app_error("trace %d: mm_init failed in eval_mm_util", tracenum);
     }
@@ -1004,7 +1004,7 @@ static void eval_mm_speed(void *ptr)
 	reinit_trace(trace);
 
 	/* Reset the heap and initialize the mm package */
-	mem_reset_brk();
+	mem_reset_brk(false);
 	if (!mm_init()) {
 		app_error("mm_init failed in eval_mm_speed");
     }
diff --git a/include/memlib.h b/include/memlib.h
index f87c2e8..f41e6d6 100644
--- a/include/memlib.h
+++ b/include/memlib.h
@@ -1,10 +1,11 @@
+#include <stdbool.h>
 #include <stddef.h>
 #include <sys/types.h>
 
 void mem_init(void);
 void mem_deinit(void);
 void *mem_sbrk(ssize_t incr);
-void mem_reset_brk(void);
+void mem_reset_brk(bool clear);
 void *mem_heap_lo(void);
 void *mem_heap_hi(void);
 size_t mem_heapsize(void);
diff --git a/src/memlib.c b/src/memlib.c
index 85a456a..6f21f61 100644
--- a/src/memlib.c
+++ b/src/memlib.c
@@ -30,7 +30,7 @@ void mem_init() {
     );
 
     /* Heap is initially empty. */
-    mem_reset_brk();
+    mem_reset_brk(true);
 }
 
 /*
@@ -43,11 +43,13 @@ void mem_deinit() {
 /*
  * mem_reset_brk - reset the simulated brk pointer to make an empty heap
  */
-void mem_reset_brk() {
+void mem_reset_brk(bool clear) {
     mem_brk = heap;
 
     /* Fill heap with garbage since it is uninitialized. */
-    memset(heap, 0xCC, MAX_HEAP);
+    if (clear) {
+        memset(heap, 0xCC, MAX_HEAP);
+    }
 }
 
 /*
-- 
GitLab