summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--net/dns/manager_linux.go2
-rw-r--r--net/dns/manager_linux_test.go13
-rw-r--r--util/eventbus/subscribe.go6
3 files changed, 20 insertions, 1 deletions
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]))
}
}
}