From 067ed0bf6fa8f725ab7f3b645d7f3bf1ebb1c533 Mon Sep 17 00:00:00 2001 From: Percy Wegmann Date: Wed, 20 Mar 2024 10:15:05 -0500 Subject: [PATCH] ipnlocal: ensure TailFS share notifications are non-nil This allows the UI to distinguish between 'no shares' versus 'not being notified about shares'. Updates ENG-2843 Signed-off-by: Percy Wegmann --- ipn/ipnlocal/tailfs.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ipn/ipnlocal/tailfs.go b/ipn/ipnlocal/tailfs.go index 6f11b1178..4fd1b95af 100644 --- a/ipn/ipnlocal/tailfs.go +++ b/ipn/ipnlocal/tailfs.go @@ -274,6 +274,10 @@ func (b *LocalBackend) tailFSSetSharesLocked(shares []*tailfs.Share) error { // tailFSNotifyShares notifies IPN bus listeners (e.g. Mac Application process) // about the latest list of shares. func (b *LocalBackend) tailFSNotifyShares(shares views.SliceView[*tailfs.Share, tailfs.ShareView]) { + // Ensures shares is not nil to distinguish "no shares" from "not notifying shares" + if shares.IsNil() { + shares = views.SliceOfViews(make([]*tailfs.Share, 0)) + } b.send(ipn.Notify{TailFSShares: shares}) } @@ -289,10 +293,6 @@ func (b *LocalBackend) tailFSNotifyCurrentSharesLocked() { lastNotified := b.lastNotifiedTailFSShares.Load() if lastNotified == nil || !tailFSShareViewsEqual(lastNotified, shares) { // Do the below on a goroutine to avoid deadlocking on b.mu in b.send(). - if shares.IsNil() { - // set to a non-nil value to indicate we have 0 shares - shares = views.SliceOfViews(make([]*tailfs.Share, 0)) - } go b.tailFSNotifyShares(shares) } }