diff options
Diffstat (limited to 'libgo/go/net/textproto/reader.go')
-rw-r--r-- | libgo/go/net/textproto/reader.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libgo/go/net/textproto/reader.go b/libgo/go/net/textproto/reader.go index 2c4f25d5ae6..a5cab993b29 100644 --- a/libgo/go/net/textproto/reader.go +++ b/libgo/go/net/textproto/reader.go @@ -11,6 +11,7 @@ import ( "io/ioutil" "strconv" "strings" + "sync" ) // A Reader implements convenience methods for reading requests @@ -27,6 +28,7 @@ type Reader struct { // should be reading from an io.LimitReader or similar Reader to bound // the size of responses. func NewReader(r *bufio.Reader) *Reader { + commonHeaderOnce.Do(initCommonHeader) return &Reader{R: r} } @@ -571,6 +573,8 @@ func (r *Reader) upcomingHeaderNewlines() (n int) { // If s contains a space or invalid header field bytes, it is // returned without modifications. func CanonicalMIMEHeaderKey(s string) string { + commonHeaderOnce.Do(initCommonHeader) + // Quick check for canonical encoding. upper := true for i := 0; i < len(s); i++ { @@ -642,9 +646,12 @@ func canonicalMIMEHeaderKey(a []byte) string { } // commonHeader interns common header strings. -var commonHeader = make(map[string]string) +var commonHeader map[string]string + +var commonHeaderOnce sync.Once -func init() { +func initCommonHeader() { + commonHeader = make(map[string]string) for _, v := range []string{ "Accept", "Accept-Charset", |