aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/expvar/expvar.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/expvar/expvar.go')
-rw-r--r--libgo/go/expvar/expvar.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/libgo/go/expvar/expvar.go b/libgo/go/expvar/expvar.go
index 976b300..c0dc053 100644
--- a/libgo/go/expvar/expvar.go
+++ b/libgo/go/expvar/expvar.go
@@ -141,8 +141,14 @@ func (v *Map) Init() *Map {
func (v *Map) addKey(key string) {
v.keysMu.Lock()
defer v.keysMu.Unlock()
- v.keys = append(v.keys, key)
- sort.Strings(v.keys)
+ // Using insertion sort to place key into the already-sorted v.keys.
+ if i := sort.SearchStrings(v.keys, key); i >= len(v.keys) {
+ v.keys = append(v.keys, key)
+ } else if v.keys[i] != key {
+ v.keys = append(v.keys, "")
+ copy(v.keys[i+1:], v.keys[i:])
+ v.keys[i] = key
+ }
}
func (v *Map) Get(key string) Var {