Index: benchmark/readyQ/locality.cfa
===================================================================
--- benchmark/readyQ/locality.cfa	(revision ee56a4fc2af48e1f01d53b09c81b696e0c1aec20)
+++ benchmark/readyQ/locality.cfa	(revision 28220d27c3aef9ae669f1d9503c679131fa4e2de)
@@ -63,5 +63,5 @@
 }
 
-void access(MyData & this, size_t idx) {
+__attribute__((nolinline)) void access(MyData & this, size_t idx) {
 	size_t l = this.len;
 	this.data[idx % l] += 1;
@@ -126,5 +126,5 @@
 // ==================================================
 // Do some work by accessing 'cnt' cells in the array
-void work(MyData & data, size_t cnt, uint64_t & state) {
+__attribute__((nolinline)) void work(MyData & data, size_t cnt, uint64_t & state) {
 	for (cnt) {
 		access(data, __xorshift64(state));
@@ -166,4 +166,5 @@
 
 void ?{}( MyThread & this, MyData * data, MySpot ** spots, size_t spot_len, size_t cnt, bool share, size_t id) {
+	((thread&)this){ bench_cluster };
 	this.data = data;
 	this.spots.ptr = spots;
@@ -196,18 +197,18 @@
 	unsigned long long global_dmigs = 0;
 
-	MyData * data_arrays[nthreads];
-	for(i; nthreads) {
-		data_arrays[i] = malloc();
-		(*data_arrays[i]){ i, wsize };
-	}
-
-	MySpot * spots[nthreads - nprocs];
-	for(i; nthreads - nprocs) {
-		spots[i] = malloc();
-		(*spots[i]){ i };
-	}
-
 	Time start, end;
 	{
+		MyData * data_arrays[nthreads];
+		for(i; nthreads) {
+			data_arrays[i] = malloc();
+			(*data_arrays[i]){ i, wsize };
+		}
+
+		MySpot * spots[nthreads - nprocs];
+		for(i; nthreads - nprocs) {
+			spots[i] = malloc();
+			(*spots[i]){ i };
+		}
+
 		BenchCluster bc = { nprocs };
 		threads_left = nprocs;
@@ -249,4 +250,12 @@
 				delete(threads[i]);
 			}
+		}
+
+		for(i; nthreads) {
+			delete( data_arrays[i] );
+		}
+
+		for(i; nthreads - nprocs) {
+			delete( spots[i] );
 		}
 	}
