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