mirror of
https://github.com/fhmq/hmq.git
synced 2026-05-04 07:08:32 +00:00
* 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:
@@ -164,9 +164,14 @@ func publish(sub *subscription, packet *packets.PublishPacket) {
|
|||||||
|
|
||||||
// timer for retry delivery
|
// timer for retry delivery
|
||||||
func (c *client) ensureRetryTimer(interval ...int64) {
|
func (c *client) ensureRetryTimer(interval ...int64) {
|
||||||
|
|
||||||
|
c.retryTimerLock.Lock()
|
||||||
|
defer c.retryTimerLock.Unlock()
|
||||||
|
|
||||||
if c.retryTimer != nil {
|
if c.retryTimer != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(interval) > 1 {
|
if len(interval) > 1 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -174,21 +179,23 @@ func (c *client) ensureRetryTimer(interval ...int64) {
|
|||||||
if len(interval) == 1 {
|
if len(interval) == 1 {
|
||||||
timerInterval = interval[0]
|
timerInterval = interval[0]
|
||||||
}
|
}
|
||||||
c.retryTimerLock.Lock()
|
|
||||||
c.retryTimer = time.AfterFunc(time.Duration(timerInterval)*time.Second, c.retryDelivery)
|
c.retryTimer = time.AfterFunc(time.Duration(timerInterval)*time.Second, c.retryDelivery)
|
||||||
c.retryTimerLock.Unlock()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) resetRetryTimer() {
|
func (c *client) resetRetryTimer() {
|
||||||
|
// lock mutex before reading retryTimer
|
||||||
|
c.retryTimerLock.Lock()
|
||||||
|
defer c.retryTimerLock.Unlock()
|
||||||
|
|
||||||
if c.retryTimer == nil {
|
if c.retryTimer == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// reset timer
|
|
||||||
c.retryTimerLock.Lock()
|
|
||||||
c.retryTimer = nil
|
|
||||||
c.retryTimerLock.Unlock()
|
|
||||||
|
|
||||||
|
// reset timer
|
||||||
|
c.retryTimer = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) retryDelivery() {
|
func (c *client) retryDelivery() {
|
||||||
|
|||||||
Reference in New Issue
Block a user