From 7f3343169a2ce923cd3d13329e30b804b0fd91aa Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Wed, 12 Mar 2025 15:58:38 +0800 Subject: [PATCH] Better atomic using --- monitor_android.go | 3 +-- monitor_darwin.go | 3 +-- monitor_linux_default.go | 3 +-- monitor_windows.go | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/monitor_android.go b/monitor_android.go index 2734c85..1c7e711 100644 --- a/monitor_android.go +++ b/monitor_android.go @@ -51,12 +51,11 @@ func (m *defaultInterfaceMonitor) checkUpdate() error { return err } - oldInterface := m.defaultInterface.Load() newInterface, err := m.interfaceFinder.ByIndex(link.Attrs().Index) if err != nil { return E.Cause(err, "find updated interface: ", link.Attrs().Name) } - m.defaultInterface.Store(newInterface) + oldInterface := m.defaultInterface.Swap(newInterface) if oldInterface != nil && oldInterface.Equals(*newInterface) && oldVPNEnabled == m.androidVPNEnabled { return nil } diff --git a/monitor_darwin.go b/monitor_darwin.go index 88ea90c..f937c37 100644 --- a/monitor_darwin.go +++ b/monitor_darwin.go @@ -165,12 +165,11 @@ func (m *defaultInterfaceMonitor) checkUpdate() error { if defaultInterface == nil { return ErrNoRoute } - oldInterface := m.defaultInterface.Load() newInterface, err := m.interfaceFinder.ByIndex(defaultInterface.Index) if err != nil { return E.Cause(err, "find updated interface: ", defaultInterface.Name) } - m.defaultInterface.Store(newInterface) + oldInterface := m.defaultInterface.Swap(newInterface) if oldInterface != nil && oldInterface.Equals(*newInterface) { return nil } diff --git a/monitor_linux_default.go b/monitor_linux_default.go index e9cce1d..72ba1be 100644 --- a/monitor_linux_default.go +++ b/monitor_linux_default.go @@ -25,12 +25,11 @@ func (m *defaultInterfaceMonitor) checkUpdate() error { return err } - oldInterface := m.defaultInterface.Load() newInterface, err := m.interfaceFinder.ByIndex(link.Attrs().Index) if err != nil { return E.Cause(err, "find updated interface: ", link.Attrs().Name) } - m.defaultInterface.Store(newInterface) + oldInterface := m.defaultInterface.Swap(newInterface) if oldInterface != nil && oldInterface.Equals(*newInterface) { return nil } diff --git a/monitor_windows.go b/monitor_windows.go index 179f074..18a795f 100644 --- a/monitor_windows.go +++ b/monitor_windows.go @@ -102,12 +102,11 @@ func (m *defaultInterfaceMonitor) checkUpdate() error { return ErrNoRoute } - oldInterface := m.defaultInterface.Load() newInterface, err := m.interfaceFinder.ByIndex(index) if err != nil { return E.Cause(err, "find updated interface: ", alias) } - m.defaultInterface.Store(newInterface) + oldInterface := m.defaultInterface.Swap(newInterface) if oldInterface != nil && oldInterface.Equals(*newInterface) { return nil }