From 945dec996484e5344bf2ea77edb23f93b457b139 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Wed, 28 Feb 2018 00:14:44 -0500 Subject: [PATCH] ensure the nick timeout mechanism is cleaned up on client quit --- irc/client.go | 5 ++--- irc/idletimer.go | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/irc/client.go b/irc/client.go index 09b60c29..67b95a10 100644 --- a/irc/client.go +++ b/irc/client.go @@ -686,9 +686,8 @@ func (client *Client) destroy(beingResumed bool) { } // clean up self - if client.idletimer != nil { - client.idletimer.Stop() - } + client.idletimer.Stop() + client.nickTimer.Stop() client.server.accounts.Logout(client) diff --git a/irc/idletimer.go b/irc/idletimer.go index 77a3eb20..58962d37 100644 --- a/irc/idletimer.go +++ b/irc/idletimer.go @@ -127,6 +127,10 @@ func (it *IdleTimer) processTimeout() { // Stop stops counting idle time. func (it *IdleTimer) Stop() { + if it == nil { + return + } + it.Lock() defer it.Unlock() it.state = TimerDead @@ -232,6 +236,20 @@ func (nt *NickTimer) Touch() { } } +// Stop stops counting time and cleans up the timer +func (nt *NickTimer) Stop() { + if nt == nil { + return + } + + nt.Lock() + defer nt.Unlock() + if nt.timer != nil { + nt.timer.Stop() + nt.timer = nil + } +} + func (nt *NickTimer) sendWarning() { baseNotice := "Nickname is reserved; you must change it or authenticate to NickServ within %v" nt.client.Notice(fmt.Sprintf(nt.client.t(baseNotice), nt.timeout))