From 0e6ca4b099bd8db8746514e6345fa22ec81298c2 Mon Sep 17 00:00:00 2001 From: songgaoye Date: Fri, 23 Jan 2026 11:47:04 +0800 Subject: [PATCH 1/3] fix: prevent PrefixDB from closing underlying DB and copying prefix --- prefixdb.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/prefixdb.go b/prefixdb.go index bb10113..5772ad2 100644 --- a/prefixdb.go +++ b/prefixdb.go @@ -17,7 +17,7 @@ var _ DB = (*PrefixDB)(nil) // NewPrefixDB lets you namespace multiple DBs within a single DB. func NewPrefixDB(db DB, prefix []byte) *PrefixDB { return &PrefixDB{ - prefix: prefix, + prefix: cp(prefix), db: db, } } @@ -161,10 +161,9 @@ func (pdb *PrefixDB) NewBatch() Batch { // Close implements DB. func (pdb *PrefixDB) Close() error { - pdb.mtx.Lock() - defer pdb.mtx.Unlock() - - return pdb.db.Close() + // PrefixDB doesn't own the underlying database, so Close is a no-op. + // The underlying DB should be closed by its owner, not by prefix wrappers. + return nil } // Print implements DB. From aa97824b2535a812b1d0f9e15feebfce9cc193ca Mon Sep 17 00:00:00 2001 From: songgaoye Date: Tue, 27 Jan 2026 15:20:37 +0800 Subject: [PATCH 2/3] fix lint --- prefixdb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prefixdb.go b/prefixdb.go index 5772ad2..c3de3c7 100644 --- a/prefixdb.go +++ b/prefixdb.go @@ -160,7 +160,7 @@ func (pdb *PrefixDB) NewBatch() Batch { } // Close implements DB. -func (pdb *PrefixDB) Close() error { +func (_ *PrefixDB) Close() error { // PrefixDB doesn't own the underlying database, so Close is a no-op. // The underlying DB should be closed by its owner, not by prefix wrappers. return nil From c67e67e73d2625a94e895cc7e0074edce6d3af33 Mon Sep 17 00:00:00 2001 From: songgaoye Date: Tue, 27 Jan 2026 17:11:32 +0800 Subject: [PATCH 3/3] fix lint --- prefixdb.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prefixdb.go b/prefixdb.go index c3de3c7..fa127bb 100644 --- a/prefixdb.go +++ b/prefixdb.go @@ -160,7 +160,7 @@ func (pdb *PrefixDB) NewBatch() Batch { } // Close implements DB. -func (_ *PrefixDB) Close() error { +func (*PrefixDB) Close() error { // PrefixDB doesn't own the underlying database, so Close is a no-op. // The underlying DB should be closed by its owner, not by prefix wrappers. return nil