Jelajahi Sumber

simplified Release()

Darien Raymond 8 tahun lalu
induk
melakukan
538b0720d5
5 mengubah file dengan 14 tambahan dan 8 penghapusan
  1. 2 1
      common/buf/reader.go
  2. 2 1
      common/buf/writer.go
  3. 2 3
      common/bufio/reader.go
  4. 1 3
      common/bufio/writer.go
  5. 7 0
      common/common.go

+ 2 - 1
common/buf/reader.go

@@ -1,6 +1,7 @@
 package buf
 
 import "io"
+import "v2ray.com/core/common"
 
 // BytesToBufferReader is a Reader that adjusts its reading speed automatically.
 type BytesToBufferReader struct {
@@ -45,7 +46,7 @@ func (v *BytesToBufferReader) Read() (*Buffer, error) {
 
 // Release implements Releasable.Release().
 func (v *BytesToBufferReader) Release() {
-	v.reader = nil
+	common.Release(v.reader)
 }
 
 type BufferToBytesReader struct {

+ 2 - 1
common/buf/writer.go

@@ -1,6 +1,7 @@
 package buf
 
 import "io"
+import "v2ray.com/core/common"
 
 // BufferToBytesWriter is a Writer that writes alloc.Buffer into underlying writer.
 type BufferToBytesWriter struct {
@@ -25,7 +26,7 @@ func (v *BufferToBytesWriter) Write(buffer *Buffer) error {
 
 // Release implements Releasable.Release().
 func (v *BufferToBytesWriter) Release() {
-	v.writer = nil
+	common.Release(v.writer)
 }
 
 type BytesToBufferWriter struct {

+ 2 - 3
common/bufio/reader.go

@@ -27,9 +27,8 @@ func NewReader(rawReader io.Reader) *BufferedReader {
 func (v *BufferedReader) Release() {
 	v.buffer.Release()
 	v.buffer = nil
-	if releasable, ok := v.reader.(common.Releasable); ok {
-		releasable.Release()
-	}
+
+	common.Release(v.reader)
 }
 
 // Cached returns true if the internal cache is effective.

+ 1 - 3
common/bufio/writer.go

@@ -91,7 +91,5 @@ func (v *BufferedWriter) Release() {
 	v.buffer.Release()
 	v.buffer = nil
 
-	if releasable, ok := v.writer.(common.Releasable); ok {
-		releasable.Release()
-	}
+	common.Release(v.writer)
 }

+ 7 - 0
common/common.go

@@ -18,3 +18,10 @@ type Releasable interface {
 	// Release releases all references to accelerate garbage collection.
 	Release()
 }
+
+// Release tries to release the given object.
+func Release(v interface{}) {
+	if releasable, ok := v.(Releasable); ok {
+		releasable.Release()
+	}
+}