@cryptotaxi247 / kubo / commits / 4f34e0ec1

buffer msgio

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Jun 2, 2015 at 11:47 UTC 4f34e0ec13e121e2db5c9352771d04c55377b539
1 file changed +11 -4
Godeps/_workspace/src/github.com/jbenet/go-msgio/msgio.go
+11 -4
@@ -1,6 +1,7 @@
1 package msgio
2
3 import (
4 + "bufio"
5 "errors"
6 "io"
7 "sync"
@@ -75,7 +76,8 @@ type ReadWriteCloser interface {
76
77 // writer is the underlying type that implements the Writer interface.
78 type writer struct {
78 - W io.Writer
79 + W io.Writer
80 + buf *bufio.Writer
81
82 lock sync.Locker
83 }
@@ -83,7 +85,7 @@ type writer struct {
85 // NewWriter wraps an io.Writer with a msgio framed writer. The msgio.Writer
86 // will write the length prefix of every message written.
87 func NewWriter(w io.Writer) WriteCloser {
86 - return &writer{W: w, lock: new(sync.Mutex)}
88 + return &writer{W: w, buf: bufio.NewWriter(w), lock: new(sync.Mutex)}
89 }
90
91 func (s *writer) Write(msg []byte) (int, error) {
@@ -100,8 +102,13 @@ func (s *writer) WriteMsg(msg []byte) (err error) {
102 if err := WriteLen(s.W, len(msg)); err != nil {
103 return err
104 }
103 - _, err = s.W.Write(msg)
104 - return err
105 +
106 + _, err = s.buf.Write(msg)
107 + if err != nil {
108 + return err
109 + }
110 +
111 + return s.buf.Flush()
112 }
113
114 func (s *writer) Close() error {