From 1975b0968aca46dc171721fd884781b4c4cfab42 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Tue, 25 Feb 2020 14:04:50 -0500 Subject: [PATCH] fix double decrement of stats on ping timeout --- irc/client.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/irc/client.go b/irc/client.go index 4721ec50..5dedb650 100644 --- a/irc/client.go +++ b/irc/client.go @@ -1181,7 +1181,8 @@ func (client *Client) destroy(session *Session) { // should we destroy the whole client this time? // BRB is not respected if this is a destroy of the whole client (i.e., session == nil) brbEligible := session != nil && (brbState == BrbEnabled || alwaysOn) - shouldDestroy := !client.destroyed && remainingSessions == 0 && !brbEligible + alreadyDestroyed := client.destroyed + shouldDestroy := !alreadyDestroyed && remainingSessions == 0 && !brbEligible if shouldDestroy { // if it's our job to destroy it, don't let anyone else try client.destroyed = true @@ -1230,7 +1231,7 @@ func (client *Client) destroy(session *Session) { } // decrement stats if we have no more sessions, even if the client will not be destroyed - if shouldDestroy || remainingSessions == 0 { + if shouldDestroy || (!alreadyDestroyed && remainingSessions == 0) { invisible := client.HasMode(modes.Invisible) operator := client.HasMode(modes.LocalOperator) || client.HasMode(modes.Operator) client.server.stats.Remove(registered, invisible, operator)