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)