mirror of
https://github.com/lukaszraczylo/kportal.git
synced 2026-07-09 06:44:16 +00:00
Add startupSettleTime to zeroconf to avoid race conditions.
This commit is contained in:
@@ -89,6 +89,11 @@ func (p *Publisher) Register(forwardID, alias string, localPort int) error {
|
|||||||
p.servers[forwardID] = server
|
p.servers[forwardID] = server
|
||||||
p.aliases[forwardID] = alias
|
p.aliases[forwardID] = alias
|
||||||
|
|
||||||
|
// Allow zeroconf's internal goroutines (recv4, recv6) to fully initialize.
|
||||||
|
// This prevents a race condition where shutdown() could set connections to nil
|
||||||
|
// while recv goroutines are still starting up.
|
||||||
|
time.Sleep(startupSettleTime)
|
||||||
|
|
||||||
logger.Info("mDNS hostname registered", map[string]interface{}{
|
logger.Info("mDNS hostname registered", map[string]interface{}{
|
||||||
"forward_id": forwardID,
|
"forward_id": forwardID,
|
||||||
"hostname": GetHostname(alias),
|
"hostname": GetHostname(alias),
|
||||||
@@ -151,6 +156,13 @@ func (p *Publisher) Stop() {
|
|||||||
logger.Info("mDNS publisher stopped", nil)
|
logger.Info("mDNS publisher stopped", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// startupSettleTime is a small delay after zeroconf registration to allow internal
|
||||||
|
// goroutines (recv4, recv6) to fully initialize before any shutdown can occur.
|
||||||
|
// This works around a race condition in grandcat/zeroconf where shutdown() sets
|
||||||
|
// connections to nil while recv goroutines may still be initializing.
|
||||||
|
// See: https://github.com/grandcat/zeroconf/issues/95
|
||||||
|
const startupSettleTime = 50 * time.Millisecond
|
||||||
|
|
||||||
// shutdownSettleTime is a small delay after zeroconf shutdown to allow internal
|
// shutdownSettleTime is a small delay after zeroconf shutdown to allow internal
|
||||||
// goroutines to exit cleanly. This works around a race condition in the
|
// goroutines to exit cleanly. This works around a race condition in the
|
||||||
// grandcat/zeroconf library where recv4() can access ipv4conn after shutdown()
|
// grandcat/zeroconf library where recv4() can access ipv4conn after shutdown()
|
||||||
|
|||||||
Reference in New Issue
Block a user