|  | @@ -23,13 +23,11 @@ type UDPPayloadHandler func(*alloc.Buffer, *proxy.SessionInfo)
 | 
	
		
			
				|  |  |  type UDPPayloadQueue struct {
 | 
	
		
			
				|  |  |  	queue    []chan UDPPayload
 | 
	
		
			
				|  |  |  	callback UDPPayloadHandler
 | 
	
		
			
				|  |  | -	cancel   *signal.CancelSignal
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func NewUDPPayloadQueue(option ListenOption) *UDPPayloadQueue {
 | 
	
		
			
				|  |  |  	queue := &UDPPayloadQueue{
 | 
	
		
			
				|  |  |  		callback: option.Callback,
 | 
	
		
			
				|  |  | -		cancel:   signal.NewCloseSignal(),
 | 
	
		
			
				|  |  |  		queue:    make([]chan UDPPayload, option.Concurrency),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	for i := range queue.queue {
 | 
	
	
		
			
				|  | @@ -56,24 +54,15 @@ func (this *UDPPayloadQueue) Enqueue(payload UDPPayload) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (this *UDPPayloadQueue) Dequeue(queue <-chan UDPPayload) {
 | 
	
		
			
				|  |  | -	this.cancel.WaitThread()
 | 
	
		
			
				|  |  | -	defer this.cancel.FinishThread()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for !this.cancel.Cancelled() {
 | 
	
		
			
				|  |  | -		payload, open := <-queue
 | 
	
		
			
				|  |  | -		if !open {
 | 
	
		
			
				|  |  | -			return
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	for payload := range queue {
 | 
	
		
			
				|  |  |  		this.callback(payload.payload, payload.session)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (this *UDPPayloadQueue) Close() {
 | 
	
		
			
				|  |  | -	this.cancel.Cancel()
 | 
	
		
			
				|  |  |  	for _, queue := range this.queue {
 | 
	
		
			
				|  |  |  		close(queue)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	this.cancel.WaitForDone()
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type ListenOption struct {
 |