mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	safer check for the queues if we're blocked on a send, should work even if we're blocked on a link packet send
This commit is contained in:
		
							parent
							
								
									ff3c8cb687
								
							
						
					
					
						commit
						d43b93f60a
					
				
					 1 changed files with 4 additions and 1 deletions
				
			
		| 
						 | 
					@ -63,6 +63,7 @@ type linkInterface struct {
 | 
				
			||||||
	stallTimer     *time.Timer // Fires to signal that no incoming traffic (including keep-alive) has been seen
 | 
						stallTimer     *time.Timer // Fires to signal that no incoming traffic (including keep-alive) has been seen
 | 
				
			||||||
	closeTimer     *time.Timer // Fires when the link has been idle so long we need to close it
 | 
						closeTimer     *time.Timer // Fires when the link has been idle so long we need to close it
 | 
				
			||||||
	isIdle         bool        // True if the peer actor knows the link is idle
 | 
						isIdle         bool        // True if the peer actor knows the link is idle
 | 
				
			||||||
 | 
						isSending      bool        // True between a notifySending and a notifySent
 | 
				
			||||||
	blocked        bool        // True if we've blocked the peer in the switch
 | 
						blocked        bool        // True if we've blocked the peer in the switch
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -296,7 +297,7 @@ func (intf *linkInterface) linkOut(bs []byte) {
 | 
				
			||||||
func (intf *linkInterface) notifyQueued(seq uint64) {
 | 
					func (intf *linkInterface) notifyQueued(seq uint64) {
 | 
				
			||||||
	// This is the part where we want non-nil 'from' fields
 | 
						// This is the part where we want non-nil 'from' fields
 | 
				
			||||||
	intf.Act(intf.peer, func() {
 | 
						intf.Act(intf.peer, func() {
 | 
				
			||||||
		if !intf.isIdle {
 | 
							if intf.isSending {
 | 
				
			||||||
			intf.peer.dropFromQueue(intf, seq)
 | 
								intf.peer.dropFromQueue(intf, seq)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
| 
						 | 
					@ -336,6 +337,7 @@ func (intf *linkInterface) notifySending(size int, isLinkTraffic bool) {
 | 
				
			||||||
		if !isLinkTraffic {
 | 
							if !isLinkTraffic {
 | 
				
			||||||
			intf.isIdle = false
 | 
								intf.isIdle = false
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							intf.isSending = true
 | 
				
			||||||
		intf.sendTimer = time.AfterFunc(sendTime, intf.notifyBlockedSend)
 | 
							intf.sendTimer = time.AfterFunc(sendTime, intf.notifyBlockedSend)
 | 
				
			||||||
		intf._cancelStallTimer()
 | 
							intf._cancelStallTimer()
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
| 
						 | 
					@ -370,6 +372,7 @@ func (intf *linkInterface) notifySent(size int, isLinkTraffic bool) {
 | 
				
			||||||
		if !isLinkTraffic {
 | 
							if !isLinkTraffic {
 | 
				
			||||||
			intf._notifyIdle()
 | 
								intf._notifyIdle()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							intf.isSending = false
 | 
				
			||||||
		if size > 0 && intf.stallTimer == nil {
 | 
							if size > 0 && intf.stallTimer == nil {
 | 
				
			||||||
			intf.stallTimer = time.AfterFunc(stallTime, intf.notifyStalled)
 | 
								intf.stallTimer = time.AfterFunc(stallTime, intf.notifyStalled)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue