From f159d504f2f0255fb0d5736b3b916909c5970ecf Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Mon, 12 Dec 2016 02:14:48 +0100 Subject: [PATCH] comments --- common/bufio/bufio.go | 2 ++ common/bufio/reader.go | 11 +++++++++++ common/bufio/writer.go | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/common/bufio/bufio.go b/common/bufio/bufio.go index 70a7c4b75..b4457dc8e 100644 --- a/common/bufio/bufio.go +++ b/common/bufio/bufio.go @@ -6,10 +6,12 @@ import ( "io" ) +// OriginalReader invokes bufio.NewReader() from Golang standard library. func OriginalReader(reader io.Reader) *bufio.Reader { return bufio.NewReader(reader) } +// OriginalReaderSize invokes bufio.NewReaderSize() from Golang standard library. func OriginalReaderSize(reader io.Reader, size int) *bufio.Reader { return bufio.NewReaderSize(reader, size) } diff --git a/common/bufio/reader.go b/common/bufio/reader.go index 1c53dae96..b00cd207d 100644 --- a/common/bufio/reader.go +++ b/common/bufio/reader.go @@ -4,9 +4,11 @@ import ( "io" "sync" + "v2ray.com/core/common" "v2ray.com/core/common/buf" ) +// BufferedReader is a reader with internal cache. type BufferedReader struct { sync.Mutex reader io.Reader @@ -14,6 +16,7 @@ type BufferedReader struct { cached bool } +// NewReader creates a new BufferedReader based on an io.Reader. func NewReader(rawReader io.Reader) *BufferedReader { return &BufferedReader{ reader: rawReader, @@ -22,23 +25,31 @@ func NewReader(rawReader io.Reader) *BufferedReader { } } +// Release implements Releasable.Release(). func (v *BufferedReader) Release() { v.Lock() defer v.Unlock() v.buffer.Release() v.buffer = nil + if releasable, ok := v.reader.(common.Releasable); ok { + releasable.Release() + } v.reader = nil } +// Cached returns true if the internal cache is effective. func (v *BufferedReader) Cached() bool { return v.cached } +// SetCached is to enable or disable internal cache. If cache is disabled, +// Read() and Write() calls will be delegated to the underlying io.Reader directly. func (v *BufferedReader) SetCached(cached bool) { v.cached = cached } +// Read implements io.Reader.Read(). func (v *BufferedReader) Read(b []byte) (int, error) { v.Lock() defer v.Unlock() diff --git a/common/bufio/writer.go b/common/bufio/writer.go index 497a59645..1c8a0cabd 100644 --- a/common/bufio/writer.go +++ b/common/bufio/writer.go @@ -4,6 +4,7 @@ import ( "io" "sync" + "v2ray.com/core/common" "v2ray.com/core/common/buf" "v2ray.com/core/common/errors" ) @@ -117,5 +118,9 @@ func (v *BufferedWriter) Release() { v.buffer.Release() v.buffer = nil + + if releasable, ok := v.writer.(common.Releasable); ok { + releasable.Release() + } v.writer = nil }