diff --git a/rbf/db.go b/rbf/db.go index 9ff40a204..5bbf117e9 100644 --- a/rbf/db.go +++ b/rbf/db.go @@ -100,6 +100,13 @@ func CreateDirIfNotExist(path string) { } } +// TxN returns the number of active transactions. +func (db *DB) TxN() int { + db.mu.RLock() + defer db.mu.RUnlock() + return len(db.txs) +} + // Open opens a database with the file specified in Path. // Creates a new file if one does not already exist. func (db *DB) Open() (err error) { diff --git a/rbf/rbf_test.go b/rbf/rbf_test.go index 8b4768cd5..e4ea450e2 100644 --- a/rbf/rbf_test.go +++ b/rbf/rbf_test.go @@ -86,6 +86,8 @@ func MustCloseDB(tb testing.TB, db *rbf.DB) { tb.Helper() if err := db.Check(); err != nil && err != rbf.ErrClosed { tb.Fatal(err) + } else if n := db.TxN(); n != 0 { + tb.Fatalf("db still has %d active transactions; must closed before closing db", n) } else if err := db.Close(); err != nil && err != rbf.ErrClosed { tb.Fatal(err) } else if err := os.RemoveAll(db.Path); err != nil {