Skip to content

Commit dfc90b0

Browse files
authored
fix: Better lock handling on close (#1023)
1 parent b74859b commit dfc90b0

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v1.3.4, December 17, 2024
4+
5+
- [#1023](https://github.com/cosmos/iavl/pull/1023) Better lock handling on close
6+
7+
38
## v1.3.3, December 16, 2024
49

510
- [#1018](https://github.com/cosmos/iavl/pull/1018) Cache first version for legacy versions, fix performance regression after upgrade.

nodedb.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ func (ndb *nodeDB) startPruning() {
601601
for {
602602
select {
603603
case <-ndb.ctx.Done():
604-
ndb.done <- struct{}{}
604+
close(ndb.done)
605605
return
606606
default:
607607
ndb.mtx.Lock()
@@ -1122,14 +1122,15 @@ func (ndb *nodeDB) traverseOrphans(prevVersion, curVersion int64, fn func(*Node)
11221122

11231123
// Close the nodeDB.
11241124
func (ndb *nodeDB) Close() error {
1125-
ndb.mtx.Lock()
1126-
defer ndb.mtx.Unlock()
1127-
11281125
ndb.cancel()
1126+
11291127
if ndb.opts.AsyncPruning {
11301128
<-ndb.done // wait for the pruning process to finish
11311129
}
11321130

1131+
ndb.mtx.Lock()
1132+
defer ndb.mtx.Unlock()
1133+
11331134
if ndb.batch != nil {
11341135
if err := ndb.batch.Close(); err != nil {
11351136
return err

nodedb_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,4 +444,5 @@ func TestCloseNodeDB(t *testing.T) {
444444
opts.AsyncPruning = true
445445
ndb := newNodeDB(db, 0, opts, NewNopLogger())
446446
require.NoError(t, ndb.Close())
447+
require.NoError(t, ndb.Close()) // must not block or fail on second call
447448
}

0 commit comments

Comments
 (0)