44 lines
1.3 KiB
Diff
44 lines
1.3 KiB
Diff
|
diff --git i/ethdb/database.go w/ethdb/database.go
|
||
|
index 001d8f0bb..4c9b1412c 100644
|
||
|
--- i/ethdb/database.go
|
||
|
+++ w/ethdb/database.go
|
||
|
@@ -55,6 +55,7 @@ type LDBDatabase struct {
|
||
|
|
||
|
quitLock sync.Mutex // Mutex protecting the quit channel access
|
||
|
quitChan chan chan error // Quit channel to stop the metrics collection before closing the database
|
||
|
+ wg sync.WaitGroup // WaitGroup waits till all metering collections will exit.
|
||
|
|
||
|
log log.Logger // Contextual logger tracking the database path
|
||
|
}
|
||
|
@@ -134,14 +135,11 @@ func (db *LDBDatabase) Close() {
|
||
|
// Stop the metrics collection to avoid internal database races
|
||
|
db.quitLock.Lock()
|
||
|
defer db.quitLock.Unlock()
|
||
|
-
|
||
|
if db.quitChan != nil {
|
||
|
- errc := make(chan error)
|
||
|
- db.quitChan <- errc
|
||
|
- if err := <-errc; err != nil {
|
||
|
- db.log.Error("Metrics collection failed", "err", err)
|
||
|
- }
|
||
|
+ close(db.quitChan)
|
||
|
}
|
||
|
+ db.wg.Wait()
|
||
|
+ db.quitChan = nil
|
||
|
err := db.db.Close()
|
||
|
if err == nil {
|
||
|
db.log.Info("Database closed")
|
||
|
@@ -173,7 +171,11 @@ func (db *LDBDatabase) Meter(prefix string) {
|
||
|
db.quitChan = make(chan chan error)
|
||
|
db.quitLock.Unlock()
|
||
|
|
||
|
- go db.meter(3 * time.Second)
|
||
|
+ db.wg.Add(1)
|
||
|
+ go func() {
|
||
|
+ db.wg.Done()
|
||
|
+ db.meter(3 * time.Second)
|
||
|
+ }()
|
||
|
}
|
||
|
|
||
|
// meter periodically retrieves internal leveldb counters and reports them to
|