From dc5cffbeb7b697ae6b953507bab731c96075ea7a Mon Sep 17 00:00:00 2001 From: David Symonds Date: Mon, 20 Apr 2009 00:42:08 -0700 Subject: [PATCH] Use the mutex in exvar.Set since map access is not atomic. Imagine your var has a value of zero. If you have a goroutine calling Set(5), and another calling Increment(+1), then you only want one of these outcomes: - Set completes first, and then Increment occurs => 6 - Increment completes first, and then Set occurs => 5 However, you could get a sequence: - read (for Increment) 0 - set (for Set) 5 - write (for Increment) 1 This results in a value of 1, which is undesirable. Kudos to dnadasi for catching this. R=r APPROVED=r DELTA=3 (3 added, 0 deleted, 0 changed) OCL=27625 CL=27625 --- src/lib/exvar.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/exvar.go b/src/lib/exvar.go index ccfd34acd9..319a0977a2 100644 --- a/src/lib/exvar.go +++ b/src/lib/exvar.go @@ -36,6 +36,9 @@ func Increment(name string, inc int) { // Set sets the var called name to value. func Set(name string, value int) { + mutex.Lock(); + defer mutex.Unlock(); + intVars[name] = value } -- 2.48.1