Просмотр исходного кода

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 <[email protected]>
Percy Wegmann 2 лет назад
Родитель
Сommit
067ed0bf6f
1 измененных файлов с 4 добавлено и 4 удалено
  1. 4 4
      ipn/ipnlocal/tailfs.go

+ 4 - 4
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)
 	}
 }