|  | @@ -1,8 +1,6 @@
 | 
											
												
													
														|  |  package kcp
 |  |  package kcp
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import (
 |  |  import (
 | 
											
												
													
														|  | -	"sync"
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  	"v2ray.com/core/common/buf"
 |  |  	"v2ray.com/core/common/buf"
 | 
											
												
													
														|  |  	"v2ray.com/core/common/serial"
 |  |  	"v2ray.com/core/common/serial"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
										
											
												
													
														|  | @@ -40,12 +38,6 @@ const (
 | 
											
												
													
														|  |  	DataSegmentOverhead = 18
 |  |  	DataSegmentOverhead = 18
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -var dataSegmentPool = sync.Pool{
 |  | 
 | 
											
												
													
														|  | -	New: func() interface{} {
 |  | 
 | 
											
												
													
														|  | -		return new(DataSegment)
 |  | 
 | 
											
												
													
														|  | -	},
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  type DataSegment struct {
 |  |  type DataSegment struct {
 | 
											
												
													
														|  |  	Conv        uint16
 |  |  	Conv        uint16
 | 
											
												
													
														|  |  	Option      SegmentOption
 |  |  	Option      SegmentOption
 | 
											
										
											
												
													
														|  | @@ -59,11 +51,7 @@ type DataSegment struct {
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func NewDataSegment() *DataSegment {
 |  |  func NewDataSegment() *DataSegment {
 | 
											
												
													
														|  | -	seg := dataSegmentPool.Get().(*DataSegment)
 |  | 
 | 
											
												
													
														|  | -	seg.Conv = 0
 |  | 
 | 
											
												
													
														|  | -	seg.timeout = 0
 |  | 
 | 
											
												
													
														|  | -	seg.transmit = 0
 |  | 
 | 
											
												
													
														|  | -	return seg
 |  | 
 | 
											
												
													
														|  | 
 |  | +	return new(DataSegment)
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (s *DataSegment) parse(conv uint16, cmd Command, opt SegmentOption, buf []byte) (bool, []byte) {
 |  |  func (s *DataSegment) parse(conv uint16, cmd Command, opt SegmentOption, buf []byte) (bool, []byte) {
 | 
											
										
											
												
													
														|  | @@ -135,15 +123,6 @@ func (s *DataSegment) ByteSize() int32 {
 | 
											
												
													
														|  |  func (s *DataSegment) Release() {
 |  |  func (s *DataSegment) Release() {
 | 
											
												
													
														|  |  	s.payload.Release()
 |  |  	s.payload.Release()
 | 
											
												
													
														|  |  	s.payload = nil
 |  |  	s.payload = nil
 | 
											
												
													
														|  | -	dataSegmentPool.Put(s)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -var ackSegmentPool = sync.Pool{
 |  | 
 | 
											
												
													
														|  | -	New: func() interface{} {
 |  | 
 | 
											
												
													
														|  | -		return &AckSegment{
 |  | 
 | 
											
												
													
														|  | -			NumberList: make([]uint32, 0, 16),
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	},
 |  | 
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  type AckSegment struct {
 |  |  type AckSegment struct {
 | 
											
										
											
												
													
														|  | @@ -158,9 +137,7 @@ type AckSegment struct {
 | 
											
												
													
														|  |  const ackNumberLimit = 128
 |  |  const ackNumberLimit = 128
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func NewAckSegment() *AckSegment {
 |  |  func NewAckSegment() *AckSegment {
 | 
											
												
													
														|  | -	seg := ackSegmentPool.Get().(*AckSegment)
 |  | 
 | 
											
												
													
														|  | -	seg.NumberList = seg.NumberList[:0]
 |  | 
 | 
											
												
													
														|  | -	return seg
 |  | 
 | 
											
												
													
														|  | 
 |  | +	return new(AckSegment)
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (s *AckSegment) parse(conv uint16, cmd Command, opt SegmentOption, buf []byte) (bool, []byte) {
 |  |  func (s *AckSegment) parse(conv uint16, cmd Command, opt SegmentOption, buf []byte) (bool, []byte) {
 | 
											
										
											
												
													
														|  | @@ -239,9 +216,7 @@ func (s *AckSegment) Bytes() buf.Supplier {
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -func (s *AckSegment) Release() {
 |  | 
 | 
											
												
													
														|  | -	ackSegmentPool.Put(s)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | 
 |  | +func (s *AckSegment) Release() {}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  type CmdOnlySegment struct {
 |  |  type CmdOnlySegment struct {
 | 
											
												
													
														|  |  	Conv          uint16
 |  |  	Conv          uint16
 |