Skip to content

Commit cd36c4f

Browse files
committed
Signed-off-by: Vishal Rana <[email protected]>
1 parent 891d851 commit cd36c4f

File tree

1 file changed

+8
-21
lines changed

1 file changed

+8
-21
lines changed

middleware/compress.go

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"net"
99
"net/http"
1010
"strings"
11-
"sync"
1211

1312
"github.com/labstack/echo"
1413
)
@@ -55,7 +54,6 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
5554
config.Level = DefaultGzipConfig.Level
5655
}
5756

58-
pool := gzipPool(config)
5957
scheme := "gzip"
6058

6159
return func(next echo.HandlerFunc) echo.HandlerFunc {
@@ -68,11 +66,10 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
6866
res.Header().Add(echo.HeaderVary, echo.HeaderAcceptEncoding)
6967
if strings.Contains(c.Request().Header.Get(echo.HeaderAcceptEncoding), scheme) {
7068
rw := res.Writer()
71-
w := pool.Get().(*gzip.Writer)
72-
w.Reset(c.Response().Writer())
73-
// rw := res.Writer()
74-
// gw := pool.Get().(*gzip.Writer)
75-
// gw.Reset(rw)
69+
w, err := gzip.NewWriterLevel(rw, config.Level)
70+
if err != nil {
71+
return err
72+
}
7673
defer func() {
7774
if res.Size == 0 {
7875
// We have to reset response to it's pristine state when
@@ -83,9 +80,8 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
8380
w.Reset(ioutil.Discard)
8481
}
8582
w.Close()
86-
pool.Put(w)
8783
}()
88-
grw := gzipResponseWriter{Writer: w, ResponseWriter: res.Writer()}
84+
grw := &gzipResponseWriter{Writer: w, ResponseWriter: rw}
8985
res.Header().Set(echo.HeaderContentEncoding, scheme)
9086
res.SetWriter(grw)
9187
}
@@ -94,30 +90,21 @@ func GzipWithConfig(config GzipConfig) echo.MiddlewareFunc {
9490
}
9591
}
9692

97-
func (w gzipResponseWriter) Write(b []byte) (int, error) {
93+
func (w *gzipResponseWriter) Write(b []byte) (int, error) {
9894
if w.Header().Get(echo.HeaderContentType) == "" {
9995
w.Header().Set(echo.HeaderContentType, http.DetectContentType(b))
10096
}
10197
return w.Writer.Write(b)
10298
}
10399

104-
func (w gzipResponseWriter) Flush() error {
100+
func (w *gzipResponseWriter) Flush() error {
105101
return w.Writer.(*gzip.Writer).Flush()
106102
}
107103

108-
func (w gzipResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
104+
func (w *gzipResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
109105
return w.ResponseWriter.(http.Hijacker).Hijack()
110106
}
111107

112108
func (w *gzipResponseWriter) CloseNotify() <-chan bool {
113109
return w.ResponseWriter.(http.CloseNotifier).CloseNotify()
114110
}
115-
116-
func gzipPool(config GzipConfig) sync.Pool {
117-
return sync.Pool{
118-
New: func() interface{} {
119-
w, _ := gzip.NewWriterLevel(ioutil.Discard, config.Level)
120-
return w
121-
},
122-
}
123-
}

0 commit comments

Comments
 (0)