diff --git a/lib/security/serialization/serialization_test.go b/lib/security/serialization/serialization_test.go
index 2de7519..420b4a1 100644
--- a/lib/security/serialization/serialization_test.go
+++ b/lib/security/serialization/serialization_test.go
@@ -83,7 +83,7 @@
 }
 
 func TestRoundTrip(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	signer := newSigner()
 	d, s := &bufferCloser{}, &bufferCloser{}
 
diff --git a/runtime/internal/lib/deque/deque_test.go b/runtime/internal/lib/deque/deque_test.go
index 9cac8e0..2595bf4 100644
--- a/runtime/internal/lib/deque/deque_test.go
+++ b/runtime/internal/lib/deque/deque_test.go
@@ -136,7 +136,7 @@
 }
 
 func TestRandom(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	var q T
 	var contents []int
 	for i := 0; i != 1000; i++ {
diff --git a/runtime/internal/lib/sync/wait_group_test.go b/runtime/internal/lib/sync/wait_group_test.go
index 859b323..30c43e6 100644
--- a/runtime/internal/lib/sync/wait_group_test.go
+++ b/runtime/internal/lib/sync/wait_group_test.go
@@ -15,7 +15,7 @@
 // TestRandom tests Wait after a random sequence of TryAdd's and Done's that
 // leaves the counter at 0.
 func TestRandom(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	var w WaitGroup
 	N := 100
 
diff --git a/runtime/internal/rpc/results_store_test.go b/runtime/internal/rpc/results_store_test.go
index b38b652..7578acf 100644
--- a/runtime/internal/rpc/results_store_test.go
+++ b/runtime/internal/rpc/results_store_test.go
@@ -29,7 +29,7 @@
 func (p keySlice) Sort()              { sort.Sort(p) }
 
 func TestStoreRandom(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	store := newStore()
 	keys := randomKeys()
 
@@ -51,7 +51,7 @@
 }
 
 func TestStoreOrdered(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	store := newStore()
 	keys := randomKeys()
 
@@ -96,7 +96,7 @@
 }
 
 func TestStoreWaitForEntryRandom(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	store := newStore()
 	keys := randomKeys()
 	var wg sync.WaitGroup
@@ -118,7 +118,7 @@
 }
 
 func TestStoreWaitForRemovedEntry(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	store := newStore()
 	keys := randomKeys()
 	var wg sync.WaitGroup
diff --git a/runtime/internal/rpc/stream/vc/vc_test.go b/runtime/internal/rpc/stream/vc/vc_test.go
index 6e2737f..7246383 100644
--- a/runtime/internal/rpc/stream/vc/vc_test.go
+++ b/runtime/internal/rpc/stream/vc/vc_test.go
@@ -62,7 +62,7 @@
 // testFlowEcho writes a random string of 'size' bytes on the flow and then
 // ensures that the same string is read back.
 func testFlowEcho(t *testing.T, flow stream.Flow, size int) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	defer flow.Close()
 	wrote := testutil.RandomBytes(size)
 	go func() {
diff --git a/runtime/internal/rpc/stream/vif/vif_test.go b/runtime/internal/rpc/stream/vif/vif_test.go
index 9d53964..b73ed57 100644
--- a/runtime/internal/rpc/stream/vif/vif_test.go
+++ b/runtime/internal/rpc/stream/vif/vif_test.go
@@ -85,7 +85,7 @@
 }
 
 func testMultipleVCsAndMultipleFlows(t *testing.T, gomaxprocs int) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	// This test dials multiple VCs from the client to the server.
 	// On each VC, it creates multiple flows, writes to them and verifies
 	// that the other process received what was written.
diff --git a/runtime/internal/testing/concurrency/clock_test.go b/runtime/internal/testing/concurrency/clock_test.go
index dcbd6fc..12b22c5 100644
--- a/runtime/internal/testing/concurrency/clock_test.go
+++ b/runtime/internal/testing/concurrency/clock_test.go
@@ -14,7 +14,7 @@
 
 // TestClone checks the clone() method of a clock.
 func TestClone(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	c1 := newClock()
 	c1[0] = testutil.RandomIntn(100)
 	c2 := c1.clone()
diff --git a/services/binary/binaryd/binaryd_v23_test.go b/services/binary/binaryd/binaryd_v23_test.go
index 0a3c05a..cdd6faf 100644
--- a/services/binary/binaryd/binaryd_v23_test.go
+++ b/services/binary/binaryd/binaryd_v23_test.go
@@ -96,7 +96,7 @@
 }
 
 func V23TestBinaryRepositoryIntegration(i *v23tests.T) {
-	defer testutil.InitRandGenerator(i.Logf)()
+	testutil.InitRandGenerator(i.Logf)
 	v23tests.RunRootMT(i, "--v23.tcp.address=127.0.0.1:0")
 
 	// Build the required binaries.
diff --git a/services/device/deviced/internal/impl/globsuid/signature_match_test.go b/services/device/deviced/internal/impl/globsuid/signature_match_test.go
index e1e8827..8f7c3c5 100644
--- a/services/device/deviced/internal/impl/globsuid/signature_match_test.go
+++ b/services/device/deviced/internal/impl/globsuid/signature_match_test.go
@@ -28,7 +28,7 @@
 )
 
 func TestDownloadSignatureMatch(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
diff --git a/services/internal/binarylib/client_test.go b/services/internal/binarylib/client_test.go
index 460f44a..000e8ca 100644
--- a/services/internal/binarylib/client_test.go
+++ b/services/internal/binarylib/client_test.go
@@ -73,7 +73,7 @@
 // TestBufferAPI tests the binary repository client-side library
 // interface using buffers.
 func TestBufferAPI(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
@@ -125,7 +125,7 @@
 // TestFileAPI tests the binary repository client-side library
 // interface using files.
 func TestFileAPI(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
diff --git a/services/internal/binarylib/http_test.go b/services/internal/binarylib/http_test.go
index a01a4f6..73b253f 100644
--- a/services/internal/binarylib/http_test.go
+++ b/services/internal/binarylib/http_test.go
@@ -21,7 +21,7 @@
 
 // TestHTTP checks that HTTP download works.
 func TestHTTP(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
diff --git a/services/internal/binarylib/impl_test.go b/services/internal/binarylib/impl_test.go
index 054f5ca..a614217 100644
--- a/services/internal/binarylib/impl_test.go
+++ b/services/internal/binarylib/impl_test.go
@@ -181,7 +181,7 @@
 // resumption ranging the number of parts the uploaded binary consists
 // of.
 func TestResumption(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
@@ -227,7 +227,7 @@
 
 // TestErrors checks that the binary interface correctly reports errors.
 func TestErrors(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
diff --git a/test/modules/queue_rw_test.go b/test/modules/queue_rw_test.go
index fd55475..af20b44 100644
--- a/test/modules/queue_rw_test.go
+++ b/test/modules/queue_rw_test.go
@@ -14,7 +14,7 @@
 )
 
 func TestQueueRW(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	q := modules.NewRW()
 	size := testutil.RandomIntn(1000)
 	data := testutil.RandomBytes(size)
diff --git a/test/testutil/rand.go b/test/testutil/rand.go
index dd65af1..3cb1526 100644
--- a/test/testutil/rand.go
+++ b/test/testutil/rand.go
@@ -92,15 +92,11 @@
 // and returns a function intended to be defer'ed that prints out the
 // seed use when creating the number number generator using the supplied
 // logging function.
-func InitRandGenerator(loggingFunc func(format string, args ...interface{})) func() {
+func InitRandGenerator(loggingFunc func(format string, args ...interface{})) {
 	once.Do(func() {
 		Rand = NewRandGenerator()
+		loggingFunc("Seeded pseudo-random number generator with %v", Rand.seed)
 	})
-	return func() {
-		if loggingFunc != nil {
-			loggingFunc("Seeded pseudo-random number generator with %v", Rand.seed)
-		}
-	}
 }
 
 var (
diff --git a/test/testutil/testdata/rand_test.go b/test/testutil/testdata/rand_test.go
index bddb946..7e403b7 100644
--- a/test/testutil/testdata/rand_test.go
+++ b/test/testutil/testdata/rand_test.go
@@ -11,7 +11,7 @@
 )
 
 func TestRandSeed(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	t.Logf("rand: %d", testutil.RandomInt())
 	t.FailNow()
 }
diff --git a/test/testutil/util_test.go b/test/testutil/util_test.go
index b2ed9f5..56f1ebc 100644
--- a/test/testutil/util_test.go
+++ b/test/testutil/util_test.go
@@ -45,21 +45,21 @@
 	v23bin := i.BinaryFromPath("v23")
 	inv := v23bin.Start("go", "test", "./testdata")
 	inv.ExpectRE("FAIL: TestRandSeed.*", 1)
-	parts := inv.ExpectRE(`rand: (\d+)`, -1)
+	parts := inv.ExpectRE(`Seeded pseudo-random number generator with (\d+)`, -1)
+	if len(parts) != 1 || len(parts[0]) != 2 {
+		i.Fatalf("failed to match regexp")
+	}
+	seed := parts[0][1]
+	parts = inv.ExpectRE(`rand: (\d+)`, -1)
 	if len(parts) != 1 || len(parts[0]) != 2 {
 		i.Fatalf("failed to match regexp")
 	}
 	randInt := parts[0][1]
-	parts = inv.ExpectRE(`Seeded pseudo-random number generator with (\d+)`, -1)
-	if len(parts) != 1 || len(parts[0]) != 2 {
-		i.Fatalf("failed to match regexp")
-	}
 
-	seed := parts[0][1]
 	// Rerun the test, this time with the seed that we want to use.
 	v23bin = v23bin.WithEnv("V23_RNG_SEED=" + seed)
 	inv = v23bin.Start("go", "test", "./testdata")
 	inv.ExpectRE("FAIL: TestRandSeed.*", 1)
-	inv.ExpectRE("rand: "+randInt, 1)
 	inv.ExpectRE("Seeded pseudo-random number generator with "+seed, -1)
+	inv.ExpectRE("rand: "+randInt, 1)
 }
diff --git a/test/v23tests/v23tests_test.go b/test/v23tests/v23tests_test.go
index 137cf47..5271ce1 100644
--- a/test/v23tests/v23tests_test.go
+++ b/test/v23tests/v23tests_test.go
@@ -144,7 +144,7 @@
 }
 
 func TestInputRedirection(t *testing.T) {
-	defer testutil.InitRandGenerator(t.Logf)()
+	testutil.InitRandGenerator(t.Logf)
 	env := v23tests.New(t)
 	defer env.Cleanup()
 
