From: Matt Joiner Date: Wed, 3 Feb 2021 08:27:26 +0000 (+1100) Subject: Fix Close race in sqlite storage when batch writes disabled X-Git-Tag: v1.24.0~4 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=371d54ab76b3481c4d7e1e272f8423410ad60e66;p=btrtrc.git Fix Close race in sqlite storage when batch writes disabled --- diff --git a/storage/sqlite/sqlite-storage.go b/storage/sqlite/sqlite-storage.go index 7fa7343b..53ca0891 100644 --- a/storage/sqlite/sqlite-storage.go +++ b/storage/sqlite/sqlite-storage.go @@ -496,13 +496,13 @@ func getLabels(skip int) pprof.LabelSet { } func (p *provider) withConn(with withConn, write bool, skip int) error { + p.closeMu.RLock() + if p.closed { + p.closeMu.RUnlock() + return errors.New("closed") + } if write && p.opts.BatchWrites { done := make(chan error) - p.closeMu.RLock() - if p.closed { - p.closeMu.RUnlock() - return errors.New("closed") - } p.writes <- writeRequest{ query: with, done: done, @@ -511,6 +511,7 @@ func (p *provider) withConn(with withConn, write bool, skip int) error { p.closeMu.RUnlock() return <-done } else { + defer p.closeMu.RUnlock() runner, err := p.getReadWithConnRunner() if err != nil { return err