Skip to content

Commit 7c04bc4

Browse files
yihuangtac0turtle
andauthored
fix: missing lock in DeleteVersionsFrom (#642)
Co-authored-by: Marko <marbar3778@yahoo.com>
1 parent d4086fe commit 7c04bc4

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

nodedb.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,11 @@ func newNodeDB(db dbm.DB, cacheSize int, opts *Options) *nodeDB {
112112
func (ndb *nodeDB) GetNode(hash []byte) (*Node, error) {
113113
ndb.mtx.Lock()
114114
defer ndb.mtx.Unlock()
115+
return ndb.unsafeGetNode(hash)
116+
}
115117

118+
// Contract: the caller should hold the ndb.mtx lock.
119+
func (ndb *nodeDB) unsafeGetNode(hash []byte) (*Node, error) {
116120
if len(hash) == 0 {
117121
return nil, ErrNodeMissingHash
118122
}
@@ -437,6 +441,9 @@ func (ndb *nodeDB) DeleteVersionsFrom(version int64) error {
437441
return fmt.Errorf("root for version %v not found", latest)
438442
}
439443

444+
ndb.mtx.Lock()
445+
defer ndb.mtx.Unlock()
446+
440447
for v, r := range ndb.versionReaders {
441448
if v >= version && r != 0 {
442449
return fmt.Errorf("unable to delete version %v with %v active readers", v, r)
@@ -582,7 +589,7 @@ func (ndb *nodeDB) deleteNodesFrom(version int64, hash []byte) error {
582589
return nil
583590
}
584591

585-
node, err := ndb.GetNode(hash)
592+
node, err := ndb.unsafeGetNode(hash)
586593
if err != nil {
587594
return err
588595
}

0 commit comments

Comments
 (0)