]> Cypherpunks repositories - gostls13.git/commit
Use the mutex in exvar.Set since map access is not atomic.
authorDavid Symonds <dsymonds@golang.org>
Mon, 20 Apr 2009 07:42:08 +0000 (00:42 -0700)
committerDavid Symonds <dsymonds@golang.org>
Mon, 20 Apr 2009 07:42:08 +0000 (00:42 -0700)
commitdc5cffbeb7b697ae6b953507bab731c96075ea7a
tree57895547d034e5093e2bd24183b6c931f12fbe6a
parenta6156873d0e499eb7710b348b539c82d1998c08e
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