File tree Expand file tree Collapse file tree 1 file changed +26
-8
lines changed Expand file tree Collapse file tree 1 file changed +26
-8
lines changed Original file line number Diff line number Diff line change 8
8
"fmt"
9
9
"io"
10
10
"io/ioutil"
11
+ "sync"
11
12
12
13
errors "gopkg.in/src-d/go-errors.v1"
13
14
"gopkg.in/src-d/go-mysql-server.v0/sql"
@@ -26,25 +27,42 @@ type Indexable interface {
26
27
gitBase
27
28
}
28
29
29
- func encodeIndexKey (k indexKey ) ([]byte , error ) {
30
- bs , err := k .encode ()
31
- if err != nil {
32
- return nil , err
33
- }
30
+ type zlibEncoder struct {
31
+ w * zlib.Writer
32
+ mut sync.Mutex
33
+ }
34
+
35
+ func (e * zlibEncoder ) encode (data []byte ) ([]byte , error ) {
36
+ e .mut .Lock ()
37
+ defer e .mut .Unlock ()
34
38
35
39
var buf bytes.Buffer
36
- gz := zlib .NewWriter (& buf )
37
- if _ , err := gz .Write (bs ); err != nil {
40
+ e .w .Reset (& buf )
41
+
42
+ if _ , err := e .w .Write (data ); err != nil {
38
43
return nil , err
39
44
}
40
45
41
- if err := gz .Close (); err != nil {
46
+ if err := e . w .Close (); err != nil {
42
47
return nil , err
43
48
}
44
49
45
50
return buf .Bytes (), nil
46
51
}
47
52
53
+ var encoder = func () * zlibEncoder {
54
+ return & zlibEncoder {w : zlib .NewWriter (bytes .NewBuffer (nil ))}
55
+ }()
56
+
57
+ func encodeIndexKey (k indexKey ) ([]byte , error ) {
58
+ bs , err := k .encode ()
59
+ if err != nil {
60
+ return nil , err
61
+ }
62
+
63
+ return encoder .encode (bs )
64
+ }
65
+
48
66
func decodeIndexKey (data []byte , k indexKey ) error {
49
67
gz , err := zlib .NewReader (bytes .NewReader (data ))
50
68
if err != nil {
You can’t perform that action at this time.
0 commit comments