Skip to content

Commit 3b1fe93

Browse files
Merge pull request #3768 from nats-io/neil/sublistptrs
Deduplicate `*subscription` in `Sublist`
2 parents f5d939e + d853b0e commit 3b1fe93

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

server/sublist.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ type notifyMaps struct {
8484
// A node contains subscriptions and a pointer to the next level.
8585
type node struct {
8686
next *level
87-
psubs map[*subscription]*subscription
88-
qsubs map[string](map[*subscription]*subscription)
87+
psubs map[*subscription]struct{}
88+
qsubs map[string]map[*subscription]struct{}
8989
plist []*subscription
9090
}
9191

@@ -98,7 +98,7 @@ type level struct {
9898

9999
// Create a new default node.
100100
func newNode() *node {
101-
return &node{psubs: make(map[*subscription]*subscription)}
101+
return &node{psubs: make(map[*subscription]struct{})}
102102
}
103103

104104
// Create a new default level.
@@ -413,30 +413,30 @@ func (s *Sublist) Insert(sub *subscription) error {
413413
l = n.next
414414
}
415415
if sub.queue == nil {
416-
n.psubs[sub] = sub
416+
n.psubs[sub] = struct{}{}
417417
isnew = len(n.psubs) == 1
418418
if n.plist != nil {
419419
n.plist = append(n.plist, sub)
420420
} else if len(n.psubs) > plistMin {
421421
n.plist = make([]*subscription, 0, len(n.psubs))
422422
// Populate
423-
for _, psub := range n.psubs {
423+
for psub := range n.psubs {
424424
n.plist = append(n.plist, psub)
425425
}
426426
}
427427
} else {
428428
if n.qsubs == nil {
429-
n.qsubs = make(map[string]map[*subscription]*subscription)
429+
n.qsubs = make(map[string]map[*subscription]struct{})
430430
}
431431
qname := string(sub.queue)
432432
// This is a queue subscription
433433
subs, ok := n.qsubs[qname]
434434
if !ok {
435-
subs = make(map[*subscription]*subscription)
435+
subs = make(map[*subscription]struct{})
436436
n.qsubs[qname] = subs
437437
isnew = true
438438
}
439-
subs[sub] = sub
439+
subs[sub] = struct{}{}
440440
}
441441

442442
s.count++
@@ -636,7 +636,7 @@ func addNodeToResults(n *node, results *SublistResult) {
636636
if n.plist != nil {
637637
results.psubs = append(results.psubs, n.plist...)
638638
} else {
639-
for _, psub := range n.psubs {
639+
for psub := range n.psubs {
640640
results.psubs = append(results.psubs, psub)
641641
}
642642
}
@@ -652,7 +652,7 @@ func addNodeToResults(n *node, results *SublistResult) {
652652
nqsub := make([]*subscription, 0, len(qr))
653653
results.qsubs = append(results.qsubs, nqsub)
654654
}
655-
for _, sub := range qr {
655+
for sub := range qr {
656656
if isRemoteQSub(sub) {
657657
ns := atomic.LoadInt32(&sub.qw)
658658
// Shadow these subscriptions
@@ -1435,13 +1435,13 @@ func (s *Sublist) addNodeToSubs(n *node, subs *[]*subscription, includeLeafHubs
14351435
addLocalSub(sub, subs, includeLeafHubs)
14361436
}
14371437
} else {
1438-
for _, sub := range n.psubs {
1438+
for sub := range n.psubs {
14391439
addLocalSub(sub, subs, includeLeafHubs)
14401440
}
14411441
}
14421442
// Queue subscriptions
14431443
for _, qr := range n.qsubs {
1444-
for _, sub := range qr {
1444+
for sub := range qr {
14451445
addLocalSub(sub, subs, includeLeafHubs)
14461446
}
14471447
}
@@ -1481,13 +1481,13 @@ func (s *Sublist) addAllNodeToSubs(n *node, subs *[]*subscription) {
14811481
if n.plist != nil {
14821482
*subs = append(*subs, n.plist...)
14831483
} else {
1484-
for _, sub := range n.psubs {
1484+
for sub := range n.psubs {
14851485
*subs = append(*subs, sub)
14861486
}
14871487
}
14881488
// Queue subscriptions
14891489
for _, qr := range n.qsubs {
1490-
for _, sub := range qr {
1490+
for sub := range qr {
14911491
*subs = append(*subs, sub)
14921492
}
14931493
}

0 commit comments

Comments
 (0)