From: Matt Joiner <anacrolix@gmail.com>
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