diff --git a/compression.go b/compression.go index 88dff5f..d642631 100644 --- a/compression.go +++ b/compression.go @@ -13,8 +13,13 @@ import ( ) var ( - flateWriterPool = sync.Pool{} - flateReaderPool = sync.Pool{} + flateWriterPool = sync.Pool{New: func() interface{} { + fw, _ := flate.NewWriter(nil, 3) + return fw + }} + flateReaderPool = sync.Pool{New: func() interface{} { + return flate.NewReader(nil) + }} ) func decompressNoContextTakeover(r io.Reader) io.ReadCloser { @@ -24,26 +29,16 @@ func decompressNoContextTakeover(r io.Reader) io.ReadCloser { // Add final block to squelch unexpected EOF error from flate reader. "\x01\x00\x00\xff\xff" - i := flateReaderPool.Get() - if i == nil { - i = flate.NewReader(nil) - } - i.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil) - return &flateReadWrapper{i.(io.ReadCloser)} + fr, _ := flateReaderPool.Get().(io.ReadCloser) + fr.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil) + return &flateReadWrapper{fr} } -func compressNoContextTakeover(w io.WriteCloser) (io.WriteCloser, error) { +func compressNoContextTakeover(w io.WriteCloser) io.WriteCloser { tw := &truncWriter{w: w} - 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}, err + fw, _ := flateWriterPool.Get().(*flate.Writer) + fw.Reset(tw) + return &flateWriteWrapper{fw: fw, tw: tw} } // truncWriter is an io.Writer that writes all but the last four bytes of the diff --git a/conn.go b/conn.go index 70562f9..9c3645b 100644 --- a/conn.go +++ b/conn.go @@ -235,7 +235,7 @@ type Conn struct { writeErr error enableWriteCompression bool - newCompressionWriter func(io.WriteCloser) (io.WriteCloser, error) + newCompressionWriter func(io.WriteCloser) io.WriteCloser // Read fields reader io.ReadCloser // the current reader returned to the application @@ -444,11 +444,7 @@ func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { } c.writer = mw if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { - w, err := c.newCompressionWriter(c.writer) - if err != nil { - c.writer = nil - return nil, err - } + w := c.newCompressionWriter(c.writer) mw.compress = true c.writer = w } diff --git a/doc.go b/doc.go index 610acf7..e046b8c 100644 --- a/doc.go +++ b/doc.go @@ -150,7 +150,7 @@ // application's responsibility to check the Origin header before calling // Upgrade. // -// Compression [Experimental] +// Compression // // Per message compression extensions (RFC 7692) are experimentally supported // by this package in a limited capacity. Setting the EnableCompression option @@ -162,7 +162,7 @@ // Per message compression of messages written to a connection can be enabled // or disabled by calling the corresponding Conn method: // -// conn.EnableWriteCompression(true) +// conn.EnableWriteCompression(true) // // Currently this package does not support compression with "context takeover". // This means that messages must be compressed and decompressed in isolation,