diff options
-rw-r--r-- | core/blockchain.go | 2 | ||||
-rw-r--r-- | ethdb/database.go | 9 | ||||
-rw-r--r-- | ethdb/interface.go | 2 | ||||
-rw-r--r-- | ethdb/memory_database.go | 5 |
4 files changed, 17 insertions, 1 deletions
diff --git a/core/blockchain.go b/core/blockchain.go index 50574097c..d5e139e31 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -732,7 +732,7 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ return 0, err } bytes += batch.ValueSize() - batch = bc.chainDb.NewBatch() + batch.Reset() } } if batch.ValueSize() > 0 { diff --git a/ethdb/database.go b/ethdb/database.go index 93755dd7e..d86585f07 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -299,6 +299,11 @@ func (b *ldbBatch) ValueSize() int { return b.size } +func (b *ldbBatch) Reset() { + b.b.Reset() + b.size = 0 +} + type table struct { db Database prefix string @@ -358,3 +363,7 @@ func (tb *tableBatch) Write() error { func (tb *tableBatch) ValueSize() int { return tb.batch.ValueSize() } + +func (tb *tableBatch) Reset() { + tb.batch.Reset() +} diff --git a/ethdb/interface.go b/ethdb/interface.go index 99a5b770d..537312003 100644 --- a/ethdb/interface.go +++ b/ethdb/interface.go @@ -41,4 +41,6 @@ type Batch interface { Putter ValueSize() int // amount of data in the batch Write() error + // Reset resets the batch for reuse + Reset() } diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go index 0dd93a279..8efd7bf84 100644 --- a/ethdb/memory_database.go +++ b/ethdb/memory_database.go @@ -123,3 +123,8 @@ func (b *memBatch) Write() error { func (b *memBatch) ValueSize() int { return b.size } + +func (b *memBatch) Reset() { + b.writes = b.writes[:0] + b.size = 0 +} |