File tree Expand file tree Collapse file tree 1 file changed +12
-4
lines changed Expand file tree Collapse file tree 1 file changed +12
-4
lines changed Original file line number Diff line number Diff line change @@ -609,9 +609,12 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error {
609
609
610
610
// pebbleIterator is a wrapper of underlying iterator in storage engine.
611
611
// The purpose of this structure is to implement the missing APIs.
612
+ //
613
+ // The pebble iterator is not thread-safe.
612
614
type pebbleIterator struct {
613
- iter * pebble.Iterator
614
- moved bool
615
+ iter * pebble.Iterator
616
+ moved bool
617
+ released bool
615
618
}
616
619
617
620
// NewIterator creates a binary-alphabetical iterator over a subset
@@ -623,7 +626,7 @@ func (d *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator {
623
626
UpperBound : upperBound (prefix ),
624
627
})
625
628
iter .First ()
626
- return & pebbleIterator {iter : iter , moved : true }
629
+ return & pebbleIterator {iter : iter , moved : true , released : false }
627
630
}
628
631
629
632
// Next moves the iterator to the next key/value pair. It returns whether the
@@ -658,4 +661,9 @@ func (iter *pebbleIterator) Value() []byte {
658
661
659
662
// Release releases associated resources. Release should always succeed and can
660
663
// be called multiple times without causing error.
661
- func (iter * pebbleIterator ) Release () { iter .iter .Close () }
664
+ func (iter * pebbleIterator ) Release () {
665
+ if ! iter .released {
666
+ iter .iter .Close ()
667
+ iter .released = true
668
+ }
669
+ }
You can’t perform that action at this time.
0 commit comments