From 2dbbe6ce85a464fcfa047237e7fb820a6f8a8f34 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Sat, 9 May 2020 16:28:47 -0700 Subject: [PATCH] mvcc: Obtain txLock once in readTx#UnsafeRange Signed-off-by: Ted Yu --- mvcc/backend/read_tx.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mvcc/backend/read_tx.go b/mvcc/backend/read_tx.go index 91fe72ec5..fcca9f089 100644 --- a/mvcc/backend/read_tx.go +++ b/mvcc/backend/read_tx.go @@ -77,18 +77,25 @@ func (rt *readTx) UnsafeRange(bucketName, key, endKey []byte, limit int64) ([][] rt.txMu.RLock() bucket, ok := rt.buckets[bn] rt.txMu.RUnlock() + lockHeld := false if !ok { rt.txMu.Lock() + lockHeld = true bucket = rt.tx.Bucket(bucketName) rt.buckets[bn] = bucket - rt.txMu.Unlock() } // ignore missing bucket since may have been created in this batch if bucket == nil { + if lockHeld { + rt.txMu.Unlock() + } return keys, vals } - rt.txMu.Lock() + if !lockHeld { + rt.txMu.Lock() + lockHeld = true + } c := bucket.Cursor() rt.txMu.Unlock()