Przeglądaj źródła

prevent double release in buffer

v2ray 9 lat temu
rodzic
commit
be90c04deb
1 zmienionych plików z 6 dodań i 2 usunięć
  1. 6 2
      common/alloc/buffer.go

+ 6 - 2
common/alloc/buffer.go

@@ -166,10 +166,14 @@ func (p *bufferPool) allocate() *Buffer {
 }
 
 func (p *bufferPool) free(buffer *Buffer) {
+	rawBuffer := buffer.head
+	if rawBuffer == nil {
+		return
+	}
 	select {
-	case p.chain <- buffer.head:
+	case p.chain <- rawBuffer:
 	default:
-		p.allocator.Put(buffer.head)
+		p.allocator.Put(rawBuffer)
 	}
 }