diff --git a/lib/db/backend/leveldb_backend.go b/lib/db/backend/leveldb_backend.go index f3748f430..cc073f720 100644 --- a/lib/db/backend/leveldb_backend.go +++ b/lib/db/backend/leveldb_backend.go @@ -37,14 +37,15 @@ func (b *leveldbBackend) NewReadTransaction() (ReadTransaction, error) { } func (b *leveldbBackend) newSnapshot() (leveldbSnapshot, error) { - snap, err := b.ldb.GetSnapshot() - if err != nil { - return leveldbSnapshot{}, wrapLeveldbErr(err) - } rel, err := newReleaser(b.closeWG) if err != nil { return leveldbSnapshot{}, err } + snap, err := b.ldb.GetSnapshot() + if err != nil { + rel.Release() + return leveldbSnapshot{}, wrapLeveldbErr(err) + } return leveldbSnapshot{ snap: snap, rel: rel, @@ -52,14 +53,15 @@ func (b *leveldbBackend) newSnapshot() (leveldbSnapshot, error) { } func (b *leveldbBackend) NewWriteTransaction() (WriteTransaction, error) { - snap, err := b.newSnapshot() - if err != nil { - return nil, err // already wrapped - } rel, err := newReleaser(b.closeWG) if err != nil { return nil, err } + snap, err := b.newSnapshot() + if err != nil { + rel.Release() + return nil, err // already wrapped + } return &leveldbTransaction{ leveldbSnapshot: snap, ldb: b.ldb,