diff --git a/core/blockchain.go b/core/blockchain.go index f886ffe4ed7eab8d2d675e6647fb30d87e2b5286..1bda95231ece94f91fa9f43093871f958c008245 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -749,7 +749,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 93755dd7e3049757a4448d65d532e049f071828a..9a7c85d9ef85baef6e1ff937a3fb2ce12214f55a 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -299,6 +299,10 @@ func (b *ldbBatch) ValueSize() int { return b.size } +func (b *ldbBatch) Reset() { + b.b.Reset() +} + type table struct { db Database prefix string @@ -358,3 +362,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 99a5b770d5faa02fedda25c58627412559cf823e..5373120030d09f18e327e42fe540a99643f1c103 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 0dd93a27910c644b79e689cf2b33f0f179ef8f72..8efd7bf8458ecc1af63b7226ff8f347cc60700e3 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 +}