From 42f28ab8e374137fe3f5d25424489d879d4724f8 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Wed, 21 Jun 2017 19:06:17 -0700 Subject: Updating server dependancies (#6712) --- vendor/github.com/gorilla/websocket/compression.go | 73 +++++----------------- 1 file changed, 15 insertions(+), 58 deletions(-) (limited to 'vendor/github.com/gorilla/websocket/compression.go') diff --git a/vendor/github.com/gorilla/websocket/compression.go b/vendor/github.com/gorilla/websocket/compression.go index 813ffb1e8..72c166b2a 100644 --- a/vendor/github.com/gorilla/websocket/compression.go +++ b/vendor/github.com/gorilla/websocket/compression.go @@ -12,45 +12,31 @@ import ( "sync" ) -const ( - minCompressionLevel = -2 // flate.HuffmanOnly not defined in Go < 1.6 - maxCompressionLevel = flate.BestCompression - defaultCompressionLevel = 1 -) - var ( - flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool - flateReaderPool = sync.Pool{New: func() interface{} { - return flate.NewReader(nil) - }} + flateWriterPool = sync.Pool{} ) -func decompressNoContextTakeover(r io.Reader) io.ReadCloser { +func decompressNoContextTakeover(r io.Reader) io.Reader { const tail = // Add four bytes as specified in RFC "\x00\x00\xff\xff" + // Add final block to squelch unexpected EOF error from flate reader. "\x01\x00\x00\xff\xff" - - fr, _ := flateReaderPool.Get().(io.ReadCloser) - fr.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil) - return &flateReadWrapper{fr} + return flate.NewReader(io.MultiReader(r, strings.NewReader(tail))) } -func isValidCompressionLevel(level int) bool { - return minCompressionLevel <= level && level <= maxCompressionLevel -} - -func compressNoContextTakeover(w io.WriteCloser, level int) io.WriteCloser { - p := &flateWriterPools[level-minCompressionLevel] +func compressNoContextTakeover(w io.WriteCloser) (io.WriteCloser, error) { tw := &truncWriter{w: w} - fw, _ := p.Get().(*flate.Writer) - if fw == nil { - fw, _ = flate.NewWriter(tw, level) + i := flateWriterPool.Get() + var fw *flate.Writer + var err error + if i == nil { + fw, err = flate.NewWriter(tw, 3) } else { + fw = i.(*flate.Writer) fw.Reset(tw) } - return &flateWriteWrapper{fw: fw, tw: tw, p: p} + return &flateWrapper{fw: fw, tw: tw}, err } // truncWriter is an io.Writer that writes all but the last four bytes of the @@ -89,25 +75,24 @@ func (w *truncWriter) Write(p []byte) (int, error) { return n + nn, err } -type flateWriteWrapper struct { +type flateWrapper struct { fw *flate.Writer tw *truncWriter - p *sync.Pool } -func (w *flateWriteWrapper) Write(p []byte) (int, error) { +func (w *flateWrapper) Write(p []byte) (int, error) { if w.fw == nil { return 0, errWriteClosed } return w.fw.Write(p) } -func (w *flateWriteWrapper) Close() error { +func (w *flateWrapper) Close() error { if w.fw == nil { return errWriteClosed } err1 := w.fw.Flush() - w.p.Put(w.fw) + flateWriterPool.Put(w.fw) w.fw = nil if w.tw.p != [4]byte{0, 0, 0xff, 0xff} { return errors.New("websocket: internal error, unexpected bytes at end of flate stream") @@ -118,31 +103,3 @@ func (w *flateWriteWrapper) Close() error { } return err2 } - -type flateReadWrapper struct { - fr io.ReadCloser -} - -func (r *flateReadWrapper) Read(p []byte) (int, error) { - if r.fr == nil { - return 0, io.ErrClosedPipe - } - n, err := r.fr.Read(p) - if err == io.EOF { - // Preemptively place the reader back in the pool. This helps with - // scenarios where the application does not call NextReader() soon after - // this final read. - r.Close() - } - return n, err -} - -func (r *flateReadWrapper) Close() error { - if r.fr == nil { - return io.ErrClosedPipe - } - err := r.fr.Close() - flateReaderPool.Put(r.fr) - r.fr = nil - return err -} -- cgit v1.2.3-1-g7c22