Release 3.8.2.5: cheaper idle UI poll and tighter hot paths.
Delta getState by rev, pause when hidden, cancellable background loops, hostCache bounds, unlock PollUI around engine status, corebin singleflight, PingAll worker pool. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+20
-10
@@ -380,19 +380,20 @@ type UIPoll struct {
|
||||
AutoReconnect bool
|
||||
}
|
||||
|
||||
// PollUI gathers status + profile list under one lock without Config().Clone().
|
||||
// PollUI gathers status + profile list without Config().Clone().
|
||||
// Config/profile fields are copied under the manager lock; engine status is
|
||||
// read after unlock so a slow Engine.Running cannot block config saves.
|
||||
func (m *Manager) PollUI(includeSecrets bool) UIPoll {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
out := UIPoll{
|
||||
Status: Status{SystemProxy: m.sys.Enabled()},
|
||||
BinDir: m.binDir,
|
||||
SystemProxy: false,
|
||||
Subscription: "",
|
||||
Hy2: Hy2Options{Congestion: "bbr", BBRProfile: "standard"},
|
||||
LastError: m.lastError,
|
||||
}
|
||||
var eng Engine
|
||||
var profCopy *config.Profile
|
||||
if m.cfg != nil {
|
||||
out.Active = m.cfg.Active
|
||||
out.SystemProxy = m.cfg.SystemProxy
|
||||
@@ -424,16 +425,25 @@ func (m *Manager) PollUI(includeSecrets bool) UIPoll {
|
||||
}
|
||||
}
|
||||
}
|
||||
if m.engine != nil && m.engine.Running() {
|
||||
eng = m.engine
|
||||
if m.profile != nil {
|
||||
p := *m.profile
|
||||
profCopy = &p
|
||||
}
|
||||
sys := m.sys
|
||||
m.mu.Unlock()
|
||||
|
||||
out.Status = Status{SystemProxy: sys.Enabled()}
|
||||
if eng != nil && eng.Running() {
|
||||
out.Status.Connected = true
|
||||
if m.profile != nil {
|
||||
out.Status.Profile = m.profile.Name
|
||||
out.Status.Protocol = m.profile.Protocol
|
||||
if profCopy != nil {
|
||||
out.Status.Profile = profCopy.Name
|
||||
out.Status.Protocol = profCopy.Protocol
|
||||
}
|
||||
if hp, ok := m.engine.LocalHTTPProxy(); ok {
|
||||
if hp, ok := eng.LocalHTTPProxy(); ok {
|
||||
out.Status.HTTPProxy = hp
|
||||
}
|
||||
if sp, ok := m.engine.LocalSOCKSProxy(); ok {
|
||||
if sp, ok := eng.LocalSOCKSProxy(); ok {
|
||||
out.Status.SOCKSProxy = sp
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user