From c09105f54b250cb22216daeb73d7e073f7a7e429 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Thu, 7 Dec 2023 11:44:20 -0300 Subject: [PATCH] lmdb: use a different goroutine for each read txn. --- lmdb/query.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lmdb/query.go b/lmdb/query.go index 643501f..f3d3a86 100644 --- a/lmdb/query.go +++ b/lmdb/query.go @@ -38,8 +38,9 @@ func (b *LMDBBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (cha go func() { defer close(ch) - err := b.lmdbEnv.View(func(txn *lmdb.Txn) error { - for _, q := range queries { + for _, q := range queries { + q := q + go b.lmdbEnv.View(func(txn *lmdb.Txn) error { txn.RawRead = true defer close(q.results) @@ -111,9 +112,9 @@ func (b *LMDBBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (cha // move one back (we'll look into k and v and err in the next iteration) k, idx, iterr = cursor.Get(nil, nil, lmdb.Prev) } - } - return nil - }) + return nil + }) + } if err != nil { log.Printf("lmdb: error on cursor iteration: %v\n", err) }