File tree Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Expand file tree Collapse file tree 2 files changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -546,6 +546,7 @@ func (db *DB) close() (err error) {
546546 db .opt .Infof ("Lifetime L0 stalled for: %s\n " , time .Duration (db .lc .l0stallsMs .Load ()))
547547
548548 db .blockWrites .Store (1 )
549+ db .isClosed .Store (1 )
549550
550551 if ! db .opt .InMemory {
551552 // Stop value GC first.
@@ -631,7 +632,6 @@ func (db *DB) close() (err error) {
631632 db .blockCache .Close ()
632633 db .indexCache .Close ()
633634
634- db .isClosed .Store (1 )
635635 db .threshold .close ()
636636
637637 if db .opt .InMemory {
Original file line number Diff line number Diff line change @@ -2635,3 +2635,37 @@ func TestCompactL0OnClose(t *testing.T) {
26352635 }
26362636 })
26372637}
2638+
2639+ func TestCloseDBWhileReading (t * testing.T ) {
2640+ dir := t .TempDir ()
2641+ db , err := Open (DefaultOptions (dir ))
2642+ require .NoError (t , err )
2643+
2644+ key := []byte ("key" )
2645+ err = db .Update (func (txn * Txn ) error {
2646+ return txn .Set (key , []byte ("value" ))
2647+ })
2648+ require .NoError (t , err )
2649+
2650+ var wg sync.WaitGroup
2651+ for i := 0 ; i < 10 ; i ++ {
2652+ wg .Add (1 )
2653+ go func () {
2654+ defer wg .Done ()
2655+ for {
2656+ err := db .View (func (txn * Txn ) error {
2657+ _ , err := txn .Get (key )
2658+ return err
2659+ })
2660+ if err != nil {
2661+ require .Contains (t , err .Error (), "DB Closed" )
2662+ break
2663+ }
2664+ }
2665+ }()
2666+ }
2667+
2668+ time .Sleep (time .Second )
2669+ require .NoError (t , db .Close ())
2670+ wg .Wait ()
2671+ }
You can’t perform that action at this time.
0 commit comments