add exclusive lock when writing to Statfile

pull/42/head
ziggie 1 year ago
parent df27799b33
commit cefbff413d
No known key found for this signature in database
GPG Key ID: 61D302CA09A9C7B5

@ -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)

@ -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)

Loading…
Cancel
Save