From 6d6da10885e4c00d2c551208361b3d89886e1208 Mon Sep 17 00:00:00 2001 From: Virgil Date: Sat, 4 Apr 2026 20:02:35 +0000 Subject: [PATCH] fix(proxy): stabilise worker snapshots Co-Authored-By: Virgil --- state_impl.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/state_impl.go b/state_impl.go index f388095..2ad1ae6 100644 --- a/state_impl.go +++ b/state_impl.go @@ -1331,7 +1331,9 @@ func (w *Workers) List() []WorkerRecord { w.mu.RLock() defer w.mu.RUnlock() out := make([]WorkerRecord, len(w.entries)) - copy(out, w.entries) + for i := range w.entries { + out[i] = cloneWorkerRecord(w.entries[i]) + } return out } @@ -1384,6 +1386,17 @@ func (r *WorkerRecord) Hashrate(seconds int) float64 { return float64(total) / float64(seconds) } +func cloneWorkerRecord(record WorkerRecord) WorkerRecord { + cloned := record + for i := range record.windows { + if len(record.windows[i].buckets) == 0 { + continue + } + cloned.windows[i].buckets = append([]uint64(nil), record.windows[i].buckets...) + } + return cloned +} + // Apply parses login suffixes and applies the configured global difficulty. func (cd *CustomDiff) Apply(miner *Miner) { if cd == nil || miner == nil {