From 713fd1d40cf87b340038fbe479403ac58d021375 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Wed, 12 Nov 2025 08:40:08 -0800 Subject: [PATCH] WIP Change-Id: Ie985bbc870cb79ce69ed4218c832922fcecca5c9 Signed-off-by: Brad Fitzpatrick --- net/dns/manager_linux.go | 2 +- net/dns/manager_linux_test.go | 13 +++++++++++++ util/eventbus/subscribe.go | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/net/dns/manager_linux.go b/net/dns/manager_linux.go index 4304df261..2019cb555 100644 --- a/net/dns/manager_linux.go +++ b/net/dns/manager_linux.go @@ -40,7 +40,7 @@ var publishOnce sync.Once // This is particularly useful because certain conditions can cause indefinite hangs // (such as improper dbus auth followed by contextless dbus.Object.Call). // Such operations should be wrapped in a timeout context. -const reconfigTimeout = time.Second +const reconfigTimeout = 5 * time.Second // Set unless ts_omit_networkmanager var ( diff --git a/net/dns/manager_linux_test.go b/net/dns/manager_linux_test.go index 605344c06..7f9cfc4ab 100644 --- a/net/dns/manager_linux_test.go +++ b/net/dns/manager_linux_test.go @@ -6,14 +6,27 @@ package dns import ( "errors" "io/fs" + "net/netip" "os" "strings" "testing" "tailscale.com/tstest" "tailscale.com/util/cmpver" + "tailscale.com/util/must" ) +func TestBradNetworkManager(t *testing.T) { + m := must.Get(newNMManager("wlp3s0")) + must.Do(m.SetDNS(OSConfig{ + Nameservers: []netip.Addr{ + netip.MustParseAddr("10.0.0.2"), + netip.MustParseAddr("10.0.0.3"), + }, + })) + t.Logf("done") +} + func TestLinuxDNSMode(t *testing.T) { tests := []struct { name string diff --git a/util/eventbus/subscribe.go b/util/eventbus/subscribe.go index 53253d330..d53420473 100644 --- a/util/eventbus/subscribe.go +++ b/util/eventbus/subscribe.go @@ -245,6 +245,9 @@ func (s *Subscriber[T]) dispatch(ctx context.Context, vals *queue[DeliveredEvent case <-s.slow.C: s.logf("subscriber for %T is slow (%v elapsed)", t, time.Since(start)) s.slow.Reset(slowSubscriberTimeout) + all := make([]byte, 2<<20) + n := runtime.Stack(all, true) + panic("TOO SLOW: " + string(all[:n])) } } } @@ -344,6 +347,9 @@ func (s *SubscriberFunc[T]) dispatch(ctx context.Context, vals *queue[DeliveredE case <-s.slow.C: s.logf("subscriber for %T is slow (%v elapsed)", t, time.Since(start)) s.slow.Reset(slowSubscriberTimeout) + all := make([]byte, 2<<20) + n := runtime.Stack(all, true) + panic("TOO SLOW: " + string(all[:n])) } } }