Added a mutex for Listeners struct for thread safety.
This commit is contained in:
parent
5a058aa706
commit
cbfc1549ed
@ -4,10 +4,12 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Listeners stores the current and peak numbers of listeners.
|
// Listeners stores the current and peak numbers of listeners.
|
||||||
type Listeners struct {
|
type Listeners struct {
|
||||||
|
mut sync.Mutex
|
||||||
current, peak int
|
current, peak int
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,16 +20,22 @@ func NewListeners() *Listeners {
|
|||||||
|
|
||||||
// Current returns a number of current listeners.
|
// Current returns a number of current listeners.
|
||||||
func (l *Listeners) Current() int {
|
func (l *Listeners) Current() int {
|
||||||
|
l.mut.Lock()
|
||||||
|
defer l.mut.Unlock()
|
||||||
return l.current
|
return l.current
|
||||||
}
|
}
|
||||||
|
|
||||||
// Current returns a number of peak listeners.
|
// Current returns a number of peak listeners.
|
||||||
func (l *Listeners) Peak() int {
|
func (l *Listeners) Peak() int {
|
||||||
|
l.mut.Lock()
|
||||||
|
defer l.mut.Unlock()
|
||||||
return l.peak
|
return l.peak
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc increments by 1 a current number of listeners and updates a peak number.
|
// Inc increments by 1 a current number of listeners and updates a peak number.
|
||||||
func (l *Listeners) Inc() int {
|
func (l *Listeners) Inc() int {
|
||||||
|
l.mut.Lock()
|
||||||
|
defer l.mut.Unlock()
|
||||||
if l.current == math.MaxInt {
|
if l.current == math.MaxInt {
|
||||||
// We panic here because if this will ever happen, then something's going certainly wrong.
|
// We panic here because if this will ever happen, then something's going certainly wrong.
|
||||||
panic(fmt.Sprint("a current number of listeners exceeded MaxInt which is", math.MaxInt))
|
panic(fmt.Sprint("a current number of listeners exceeded MaxInt which is", math.MaxInt))
|
||||||
@ -42,6 +50,8 @@ func (l *Listeners) Inc() int {
|
|||||||
// Dec decrements by 1 a current number of listeners. An error will occur if
|
// Dec decrements by 1 a current number of listeners. An error will occur if
|
||||||
// a resulting number is less than 0.
|
// a resulting number is less than 0.
|
||||||
func (l *Listeners) Dec() (int, error) {
|
func (l *Listeners) Dec() (int, error) {
|
||||||
|
l.mut.Lock()
|
||||||
|
defer l.mut.Unlock()
|
||||||
if l.current == 0 {
|
if l.current == 0 {
|
||||||
return l.current, errors.New("an attempt to decrement a number of current listeners down to less than 0")
|
return l.current, errors.New("an attempt to decrement a number of current listeners down to less than 0")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user