expvar: add (*Int).Set

R=golang-dev, adg, rsc
CC=golang-dev
https://golang.org/cl/2336044
diff --git a/src/pkg/expvar/expvar.go b/src/pkg/expvar/expvar.go
index 9435481..7a52441 100644
--- a/src/pkg/expvar/expvar.go
+++ b/src/pkg/expvar/expvar.go
@@ -6,6 +6,8 @@
 // such as operation counters in servers. It exposes these variables via
 // HTTP at /debug/vars in JSON format.
 //
+// Operations to set or modify these public variables are atomic.
+//
 // In addition to adding the HTTP handler, this package registers the
 // following variables:
 //
@@ -50,6 +52,12 @@
 	v.i += delta
 }
 
+func (v *Int) Set(value int64) {
+	v.mu.Lock()
+	defer v.mu.Unlock()
+	v.i = value
+}
+
 // Map is a string-to-Var map variable, and satisfies the Var interface.
 type Map struct {
 	m  map[string]Var
diff --git a/src/pkg/expvar/expvar_test.go b/src/pkg/expvar/expvar_test.go
index dc173b9..3dfc55a 100644
--- a/src/pkg/expvar/expvar_test.go
+++ b/src/pkg/expvar/expvar_test.go
@@ -27,6 +27,11 @@
 	if s := reqs.String(); s != "4" {
 		t.Errorf("reqs.String() = %q, want \"4\"", s)
 	}
+
+	reqs.Set(-2)
+	if reqs.i != -2 {
+		t.Errorf("reqs.i = %v, want -2", reqs.i)
+	}
 }
 
 func TestString(t *testing.T) {