diff --git a/sqlite.go b/sqlite.go index 92b1af5..27f70c1 100644 --- a/sqlite.go +++ b/sqlite.go @@ -216,24 +216,27 @@ func (ss *SqliteSession) CommitTransaction() error { } func (ss *SqliteSession) AllKeys(hash []byte) (keys chan []byte, n int, err error) { - globalLock.Lock() - defer globalLock.Unlock() + globalLock.RLock() countStmt := ss.txStmt(ss.backend.countStmt) if err = countStmt.QueryRow().Scan(&n); err != nil { if err == sql.ErrNoRows { err = nil } + globalLock.RUnlock() return } keysStmt := ss.txStmt(ss.backend.keysStmt) var rows *sql.Rows if rows, err = keysStmt.Query(); err != nil { + globalLock.RUnlock() return } + keys = make(chan []byte) go func() { + defer globalLock.RUnlock() defer rows.Close() defer close(keys) for rows.Next() {