From ed0c5a470a0b2ec85e075c3830e3f3144d86827a Mon Sep 17 00:00:00 2001 From: crn4 Date: Wed, 29 Oct 2025 16:38:33 +0100 Subject: [PATCH] sync once pointer --- management/server/store/sql_store.go | 2 ++ management/server/types/account.go | 6 +++++- management/server/types/networkmap.go | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/management/server/store/sql_store.go b/management/server/store/sql_store.go index 865051fec..017fad8d7 100644 --- a/management/server/store/sql_store.go +++ b/management/server/store/sql_store.go @@ -1620,6 +1620,8 @@ func (s *SqlStore) GetAccount(ctx context.Context, accountID string) (*types.Acc account.RoutesG = nil account.NameServerGroupsG = nil + account.InitOnce() + return &account, nil } diff --git a/management/server/types/account.go b/management/server/types/account.go index e6019d2a3..9c0c36c2d 100644 --- a/management/server/types/account.go +++ b/management/server/types/account.go @@ -89,7 +89,11 @@ type Account struct { Onboarding AccountOnboarding `gorm:"foreignKey:AccountID;references:id;constraint:OnDelete:CASCADE"` NetworkMapCache *NetworkMapBuilder `gorm:"-"` - nmapInitOnce sync.Once + nmapInitOnce *sync.Once `gorm:"-"` +} + +func (a *Account) InitOnce() { + a.nmapInitOnce = &sync.Once{} } // this class is used by gorm only diff --git a/management/server/types/networkmap.go b/management/server/types/networkmap.go index ab58e69a0..d4e6e6daa 100644 --- a/management/server/types/networkmap.go +++ b/management/server/types/networkmap.go @@ -873,6 +873,9 @@ func peerIsNameserver(peer *nbpeer.Peer, nsGroup *nbdns.NameServerGroup) bool { } func (a *Account) initNetworkMapBuilder(validatedPeers map[string]struct{}) { + if a.NetworkMapCache != nil { + return + } a.nmapInitOnce.Do(func() { a.NetworkMapCache = NewNetworkMapBuilder(a, validatedPeers) })