metropolis/consensus: fix race condition

This returns a copy of each status, instead of the same status, possibly
mutated.

Change-Id: Ic4ed425a38b001b0139a81c46c61af551b966166
Reviewed-on: https://review.monogon.dev/c/monogon/+/1826
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/consensus/consensus.go b/metropolis/node/core/consensus/consensus.go
index c000bb0..c36386c 100644
--- a/metropolis/node/core/consensus/consensus.go
+++ b/metropolis/node/core/consensus/consensus.go
@@ -336,7 +336,8 @@
 		cl:            cl,
 		ca:            s.ca,
 	}
-	s.value.Set(st)
+	st2 := *st
+	s.value.Set(&st2)
 
 	// Wait until server dies for whatever reason, update status when that
 	// happens.
@@ -348,8 +349,10 @@
 		server.Close()
 		err = ctx.Err()
 	}
+
 	st.stopped = true
-	s.value.Set(st)
+	st3 := *st
+	s.value.Set(&st3)
 	return err
 }