From 4c92e3fa226b34f724eab2484c7e576a6556c1b9 Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Fri, 4 Sep 2015 13:07:06 -0600 Subject: release read-write tx after close This commit removes references to the last write transaction and and its dirty pages after the transaction has been closed. This bug did not affect the safety of the data, however, it would cause dirty pages to linger in-memory until the next write transaction began. --- tx.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tx.go b/tx.go index 6b52b2c..cb60149 100644 --- a/tx.go +++ b/tx.go @@ -236,7 +236,8 @@ func (tx *Tx) close() { var freelistPendingN = tx.db.freelist.pending_count() var freelistAlloc = tx.db.freelist.size() - // Remove writer lock. + // Remove transaction ref & writer lock. + tx.db.rwtx = nil tx.db.rwlock.Unlock() // Merge statistics. @@ -250,7 +251,12 @@ func (tx *Tx) close() { } else { tx.db.removeTx(tx) } + + // Clear all references. tx.db = nil + tx.meta = nil + tx.root = Bucket{tx: tx} + tx.pages = nil } // Copy writes the entire database to a writer. -- cgit v1.2.3