Skip to content
This repository has been archived by the owner on Sep 9, 2022. It is now read-only.

Commit

Permalink
Merge pull request #71 from libp2p/fix/use-buffer-pool
Browse files Browse the repository at this point in the history
use buffer pool in newDelimitedReader
  • Loading branch information
vyzo authored Apr 12, 2019
2 parents d82b22d + 6083857 commit d07cd5f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
4 changes: 4 additions & 0 deletions relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ func (r *Relay) DialPeer(ctx context.Context, relay pstore.PeerInfo, dest pstore

rd := newDelimitedReader(s, maxMessageSize)
wr := newDelimitedWriter(s)
defer rd.Close()

var msg pb.CircuitRelay

Expand Down Expand Up @@ -218,6 +219,7 @@ func (r *Relay) CanHop(ctx context.Context, id peer.ID) (bool, error) {

rd := newDelimitedReader(s, maxMessageSize)
wr := newDelimitedWriter(s)
defer rd.Close()

var msg pb.CircuitRelay

Expand Down Expand Up @@ -249,6 +251,7 @@ func (r *Relay) handleNewStream(s inet.Stream) {
log.Infof("new relay stream from: %s", s.Conn().RemotePeer())

rd := newDelimitedReader(s, maxMessageSize)
defer rd.Close()

var msg pb.CircuitRelay

Expand Down Expand Up @@ -323,6 +326,7 @@ func (r *Relay) handleHopStream(s inet.Stream, msg *pb.CircuitRelay) {
// stop handshake
rd := newDelimitedReader(bs, maxMessageSize)
wr := newDelimitedWriter(bs)
defer rd.Close()

msg.Type = pb.CircuitRelay_STOP.Enum()

Expand Down
10 changes: 9 additions & 1 deletion util.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

ggio "github.com/gogo/protobuf/io"
proto "github.com/gogo/protobuf/proto"
pool "github.com/libp2p/go-buffer-pool"
peer "github.com/libp2p/go-libp2p-peer"
pstore "github.com/libp2p/go-libp2p-peerstore"
ma "github.com/multiformats/go-multiaddr"
Expand Down Expand Up @@ -64,7 +65,14 @@ type delimitedReader struct {
// - messages are small (max 4k) and the length fits in a couple of bytes,
// so overall we have at most three reads per message.
func newDelimitedReader(r io.Reader, maxSize int) *delimitedReader {
return &delimitedReader{r: r, buf: make([]byte, maxSize)}
return &delimitedReader{r: r, buf: pool.Get(maxSize)}
}

func (d *delimitedReader) Close() {
if d.buf != nil {
pool.Put(d.buf)
d.buf = nil
}
}

func (d *delimitedReader) ReadByte() (byte, error) {
Expand Down

0 comments on commit d07cd5f

Please sign in to comment.