|  | @@ -225,17 +225,21 @@ func NewConnection(conv uint16, writerCloser io.WriteCloser, local *net.UDPAddr,
 | 
	
		
			
				|  |  |  	conn.congestionControl = config.Congestion
 | 
	
		
			
				|  |  |  	conn.sendingWorker = NewSendingWorker(conn)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	isTerminating := func() bool {
 | 
	
		
			
				|  |  | +		return conn.State().Is(StateTerminating, StateTerminated)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	isTerminated := func() bool {
 | 
	
		
			
				|  |  | +		return conn.State() == StateTerminated
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  	conn.dataUpdater = NewUpdater(
 | 
	
		
			
				|  |  |  		conn.interval,
 | 
	
		
			
				|  |  | -		predicate.Any(conn.sendingWorker.UpdateNecessary, conn.receivingWorker.UpdateNecessary),
 | 
	
		
			
				|  |  | -		func() bool {
 | 
	
		
			
				|  |  | -			return conn.State() == StateTerminated
 | 
	
		
			
				|  |  | -		},
 | 
	
		
			
				|  |  | +		predicate.All(predicate.Not(isTerminating), predicate.Any(conn.sendingWorker.UpdateNecessary, conn.receivingWorker.UpdateNecessary)),
 | 
	
		
			
				|  |  | +		isTerminating,
 | 
	
		
			
				|  |  |  		conn.updateTask)
 | 
	
		
			
				|  |  |  	conn.pingUpdater = NewUpdater(
 | 
	
		
			
				|  |  |  		5000, // 5 seconds
 | 
	
		
			
				|  |  | -		func() bool { return conn.State() != StateTerminated },
 | 
	
		
			
				|  |  | -		func() bool { return conn.State() == StateTerminated },
 | 
	
		
			
				|  |  | +		predicate.Not(isTerminated),
 | 
	
		
			
				|  |  | +		isTerminated,
 | 
	
		
			
				|  |  |  		conn.updateTask)
 | 
	
		
			
				|  |  |  	conn.pingUpdater.WakeUp()
 | 
	
		
			
				|  |  |  
 |