From ea889742d75e68bb7ecbdf81ecbcddc12fd10616 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Thu, 17 May 2012 15:02:31 -0700 Subject: [PATCH] Using unsafe pointers to share closures. This prevents the tons of copying problems we were having before, which means we only have a 5x slowdown now. --- src/test/bench/graph500-bfs.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/bench/graph500-bfs.rs b/src/test/bench/graph500-bfs.rs index 0f6b82c5d852..43768c2b3e32 100644 --- a/src/test/bench/graph500-bfs.rs +++ b/src/test/bench/graph500-bfs.rs @@ -540,8 +540,11 @@ fn map_slices(xs: [A], f: fn~(uint, [A]) -> B) -> [B] { while base < len { let slice = vec::slice(xs, base, uint::min(len, base + items_per_task)); + let f = ptr::addr_of(f); futures += [future::spawn() {|copy base| - f(base, slice) + unsafe { + (*f)(base, slice) + } }]; base += items_per_task; }