fix: 🐛 fixes critical race condition #152 (#154)

* fix: 🐛 fixes critical race condition #152

Signed-off-by: Lucas Vieira <lucas.engen.cc@gmail.com>

* fix: fixes race condition
This commit is contained in:
Lucas Vieira
2022-04-04 09:33:11 -03:00
committed by GitHub
parent 31864cdf2b
commit f8a44be413

View File

@@ -164,9 +164,14 @@ func publish(sub *subscription, packet *packets.PublishPacket) {
// timer for retry delivery
func (c *client) ensureRetryTimer(interval ...int64) {
c.retryTimerLock.Lock()
defer c.retryTimerLock.Unlock()
if c.retryTimer != nil {
return
}
if len(interval) > 1 {
return
}
@@ -174,21 +179,23 @@ func (c *client) ensureRetryTimer(interval ...int64) {
if len(interval) == 1 {
timerInterval = interval[0]
}
c.retryTimerLock.Lock()
c.retryTimer = time.AfterFunc(time.Duration(timerInterval)*time.Second, c.retryDelivery)
c.retryTimerLock.Unlock()
return
}
func (c *client) resetRetryTimer() {
// lock mutex before reading retryTimer
c.retryTimerLock.Lock()
defer c.retryTimerLock.Unlock()
if c.retryTimer == nil {
return
}
// reset timer
c.retryTimerLock.Lock()
c.retryTimer = nil
c.retryTimerLock.Unlock()
// reset timer
c.retryTimer = nil
}
func (c *client) retryDelivery() {