Fix duplicate node creation from pre-joined DisplayName

This commit is contained in:
Ian Gulliver
2026-01-24 14:50:19 -08:00
parent 77e523a302
commit d6f3debd73
2 changed files with 13 additions and 8 deletions

View File

@@ -99,22 +99,22 @@ func (n *Nodes) UpdateDanteTxChannels(name string, ip net.IP, channels string) {
node.DanteTxChannels = channels node.DanteTxChannels = channels
} }
func (n *Nodes) GetDanteTxDeviceInGroup(groupIP net.IP) string { func (n *Nodes) GetDanteTxDeviceInGroup(groupIP net.IP) *Node {
n.mu.RLock() n.mu.RLock()
defer n.mu.RUnlock() defer n.mu.RUnlock()
groupKey := groupIP.String() groupKey := groupIP.String()
gm := n.multicastGroups[groupKey] gm := n.multicastGroups[groupKey]
if gm == nil { if gm == nil {
return "" return nil
} }
for _, membership := range gm.Members { for _, membership := range gm.Members {
if membership.Node != nil && membership.Node.DanteTxChannels != "" { if membership.Node != nil && membership.Node.DanteTxChannels != "" {
return membership.Node.DisplayName() return membership.Node
} }
} }
return "" return nil
} }
var danteSeqID uint32 var danteSeqID uint32
@@ -881,14 +881,17 @@ func (t *Tendrils) probeDanteDeviceWithPort(ip net.IP, port int) {
if needIGMPFallback { if needIGMPFallback {
groups := t.nodes.GetDanteMulticastGroups(ip) groups := t.nodes.GetDanteMulticastGroups(ip)
for _, groupIP := range groups { for _, groupIP := range groups {
sourceName := t.nodes.GetDanteTxDeviceInGroup(groupIP) sourceNode := t.nodes.GetDanteTxDeviceInGroup(groupIP)
if t.DebugDante { if t.DebugDante {
sourceName := ""
if sourceNode != nil {
sourceName = sourceNode.DisplayName()
}
log.Printf("[dante] %s: multicast group %s -> tx device %q", ip, groupIP, sourceName) log.Printf("[dante] %s: multicast group %s -> tx device %q", ip, groupIP, sourceName)
} }
if sourceName == "" { if sourceNode == nil {
sourceName = multicastGroupName(groupIP) sourceNode = t.nodes.GetOrCreateByName(multicastGroupName(groupIP))
} }
sourceNode := t.nodes.GetOrCreateByName(sourceName)
subscriberNode := t.nodes.GetOrCreateByName(info.Name) subscriberNode := t.nodes.GetOrCreateByName(info.Name)
t.danteFlows.Update(sourceNode, subscriberNode, "", DanteFlowActive) t.danteFlows.Update(sourceNode, subscriberNode, "", DanteFlowActive)
} }

2
log Normal file
View File

@@ -0,0 +1,2 @@
2026/01/24 14:49:57 [http] listening on :80
2026/01/24 14:49:57 [iface] add: en0