From cefbff413d45f542dc29552263d64fccbd682588 Mon Sep 17 00:00:00 2001 From: ziggie Date: Sat, 10 Dec 2022 11:35:47 +0100 Subject: [PATCH 1/2] add exclusive lock when writing to Statfile --- cache.go | 14 +++++++++++--- payment.go | 11 ++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/cache.go b/cache.go index 7542bbf..5b403ff 100644 --- a/cache.go +++ b/cache.go @@ -30,8 +30,12 @@ func (r *regolancer) loadNodeCache(filename string, exp int, doLock bool) error if doLock { log.Printf("Loading node cache from %s", filename) l := lock() - l.RLock() + err := l.RLock() defer l.Unlock() + + if err != nil { + return fmt.Errorf("error take shared lock on file %s: %s", filename, err) + } } f, err := os.Open(filename) if err != nil { @@ -61,11 +65,15 @@ func (r *regolancer) saveNodeCache(filename string, exp int) error { log.Printf("Saving node cache to %s", filename) l := lock() - l.Lock() + err := l.Lock() defer l.Unlock() + if err != nil { + return fmt.Errorf("error take exclusive lock on file %s: %s", filename, err) + } + old := regolancer{nodeCache: map[string]cachedNodeInfo{}} - err := old.loadNodeCache(filename, exp, false) + err = old.loadNodeCache(filename, exp, false) if err != nil { logErrorF("Error merging cache, saving anew: %s", err) diff --git a/payment.go b/payment.go index dc14345..83f69fa 100644 --- a/payment.go +++ b/payment.go @@ -129,7 +129,16 @@ func (r *regolancer) pay(ctx context.Context, amount int64, minAmount int64, log.Printf("Success! Paid %s in fees, %s ppm", formatFee(result.Route.TotalFeesMsat), formatFeePPM(result.Route.TotalAmtMsat, result.Route.TotalFeesMsat)) if r.statFilename != "" { - _, err := os.Stat(r.statFilename) + + l := lock() + err := l.Lock() + defer l.Unlock() + + if err != nil { + return fmt.Errorf("error take exclusive lock on file %s: %s", r.statFilename, err) + } + + _, err = os.Stat(r.statFilename) f, ferr := os.OpenFile(r.statFilename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if ferr != nil { logErrorF("Error saving rebalance stats to %s: %s", r.statFilename, ferr) From 189f12459758c8b5ee2ceb508f5f02b36f9c9c49 Mon Sep 17 00:00:00 2001 From: rkfg Date: Sat, 17 Dec 2022 15:17:50 +0300 Subject: [PATCH 2/2] Spelling --- cache.go | 4 ++-- payment.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cache.go b/cache.go index 5b403ff..7dc6f3c 100644 --- a/cache.go +++ b/cache.go @@ -34,7 +34,7 @@ func (r *regolancer) loadNodeCache(filename string, exp int, doLock bool) error defer l.Unlock() if err != nil { - return fmt.Errorf("error take shared lock on file %s: %s", filename, err) + return fmt.Errorf("error taking shared lock on file %s: %s", filename, err) } } f, err := os.Open(filename) @@ -69,7 +69,7 @@ func (r *regolancer) saveNodeCache(filename string, exp int) error { defer l.Unlock() if err != nil { - return fmt.Errorf("error take exclusive lock on file %s: %s", filename, err) + return fmt.Errorf("error taking exclusive lock on file %s: %s", filename, err) } old := regolancer{nodeCache: map[string]cachedNodeInfo{}} diff --git a/payment.go b/payment.go index 83f69fa..2b72879 100644 --- a/payment.go +++ b/payment.go @@ -135,7 +135,7 @@ func (r *regolancer) pay(ctx context.Context, amount int64, minAmount int64, defer l.Unlock() if err != nil { - return fmt.Errorf("error take exclusive lock on file %s: %s", r.statFilename, err) + return fmt.Errorf("error taking exclusive lock on file %s: %s", r.statFilename, err) } _, err = os.Stat(r.statFilename)