Commit dc5cffbe authored by David Symonds's avatar David Symonds

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
parent a6156873
...@@ -36,6 +36,9 @@ func Increment(name string, inc int) { ...@@ -36,6 +36,9 @@ func Increment(name string, inc int) {
// Set sets the var called name to value. // Set sets the var called name to value.
func Set(name string, value int) { func Set(name string, value int) {
mutex.Lock();
defer mutex.Unlock();
intVars[name] = value intVars[name] = value
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment