Skip to content

Commit 6c51b25

Browse files
committed
Compression improvements
- Remove unnecessary error return from compressNoContextTakeover. - Simplify use of sync.Pool. - Fix formatting in compression documentation.
1 parent 2db2f66 commit 6c51b25

File tree

3 files changed

+18
-27
lines changed

3 files changed

+18
-27
lines changed

compression.go

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ import (
1313
)
1414

1515
var (
16-
flateWriterPool = sync.Pool{}
17-
flateReaderPool = sync.Pool{}
16+
flateWriterPool = sync.Pool{New: func() interface{} {
17+
fw, _ := flate.NewWriter(nil, 3)
18+
return fw
19+
}}
20+
flateReaderPool = sync.Pool{New: func() interface{} {
21+
return flate.NewReader(nil)
22+
}}
1823
)
1924

2025
func decompressNoContextTakeover(r io.Reader) io.ReadCloser {
@@ -24,26 +29,16 @@ func decompressNoContextTakeover(r io.Reader) io.ReadCloser {
2429
// Add final block to squelch unexpected EOF error from flate reader.
2530
"\x01\x00\x00\xff\xff"
2631

27-
i := flateReaderPool.Get()
28-
if i == nil {
29-
i = flate.NewReader(nil)
30-
}
31-
i.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil)
32-
return &flateReadWrapper{i.(io.ReadCloser)}
32+
fr, _ := flateReaderPool.Get().(io.ReadCloser)
33+
fr.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil)
34+
return &flateReadWrapper{fr}
3335
}
3436

35-
func compressNoContextTakeover(w io.WriteCloser) (io.WriteCloser, error) {
37+
func compressNoContextTakeover(w io.WriteCloser) io.WriteCloser {
3638
tw := &truncWriter{w: w}
37-
i := flateWriterPool.Get()
38-
var fw *flate.Writer
39-
var err error
40-
if i == nil {
41-
fw, err = flate.NewWriter(tw, 3)
42-
} else {
43-
fw = i.(*flate.Writer)
44-
fw.Reset(tw)
45-
}
46-
return &flateWriteWrapper{fw: fw, tw: tw}, err
39+
fw, _ := flateWriterPool.Get().(*flate.Writer)
40+
fw.Reset(tw)
41+
return &flateWriteWrapper{fw: fw, tw: tw}
4742
}
4843

4944
// truncWriter is an io.Writer that writes all but the last four bytes of the

conn.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ type Conn struct {
235235
writeErr error
236236

237237
enableWriteCompression bool
238-
newCompressionWriter func(io.WriteCloser) (io.WriteCloser, error)
238+
newCompressionWriter func(io.WriteCloser) io.WriteCloser
239239

240240
// Read fields
241241
reader io.ReadCloser // the current reader returned to the application
@@ -444,11 +444,7 @@ func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) {
444444
}
445445
c.writer = mw
446446
if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) {
447-
w, err := c.newCompressionWriter(c.writer)
448-
if err != nil {
449-
c.writer = nil
450-
return nil, err
451-
}
447+
w := c.newCompressionWriter(c.writer)
452448
mw.compress = true
453449
c.writer = w
454450
}

doc.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@
150150
// application's responsibility to check the Origin header before calling
151151
// Upgrade.
152152
//
153-
// Compression [Experimental]
153+
// Compression
154154
//
155155
// Per message compression extensions (RFC 7692) are experimentally supported
156156
// by this package in a limited capacity. Setting the EnableCompression option
@@ -162,7 +162,7 @@
162162
// Per message compression of messages written to a connection can be enabled
163163
// or disabled by calling the corresponding Conn method:
164164
//
165-
// conn.EnableWriteCompression(true)
165+
// conn.EnableWriteCompression(true)
166166
//
167167
// Currently this package does not support compression with "context takeover".
168168
// This means that messages must be compressed and decompressed in isolation,

0 commit comments

Comments
 (0)