]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix Close race in sqlite storage when batch writes disabled
authorMatt Joiner <anacrolix@gmail.com>
Wed, 3 Feb 2021 08:27:26 +0000 (19:27 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 3 Feb 2021 08:27:26 +0000 (19:27 +1100)
storage/sqlite/sqlite-storage.go

index 7fa7343bd4ba4240d4f934c974208cf779eabdc8..53ca089172ffdb9eee8b3dde8822bf775f565ece 100644 (file)
@@ -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