Explorar o código

use lock for meter stopped flag

inooka_shiroyuki %!s(int64=8) %!d(string=hai) anos
pai
achega
ff4b9a81db
Modificáronse 1 ficheiros con 9 adicións e 4 borrados
  1. 9 4
      meter.go

+ 9 - 4
meter.go

@@ -140,10 +140,15 @@ func newStandardMeter() *StandardMeter {
 
 // Stop stops the meter, Mark() will panic if you use it after being stopped.
 func (m *StandardMeter) Stop() {
-	arbiter.Lock()
-	defer arbiter.Unlock()
+	m.lock.Lock()
+	stopped := m.stopped
 	m.stopped = true
-	delete(arbiter.meters, m.id)
+	m.lock.Unlock()
+	if !stopped {
+		arbiter.Lock()
+		delete(arbiter.meters, m.id)
+		arbiter.Unlock()
+	}
 }
 
 // Count returns the number of events recorded.
@@ -159,7 +164,7 @@ func (m *StandardMeter) Mark(n int64) {
 	m.lock.Lock()
 	defer m.lock.Unlock()
 	if m.stopped {
-		panic("Mark called on a stopped Meter")
+		return
 	}
 	m.snapshot.count += n
 	m.a1.Update(n)