From 59976f2fe8a24c19e83f28c5ca643c45b8d40a0b Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 12 Nov 2023 11:07:40 +0300 Subject: [PATCH] Kill myLoop in more obvious way * Explicitly use .Close on any connection before exit myLoop() * Do not use defer, notify gTomb before closing goroutines. Explicitly. --- lib.go | 7 +++---- main.go | 9 +++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib.go b/lib.go index 55e26ab..fb853fd 100644 --- a/lib.go +++ b/lib.go @@ -218,11 +218,10 @@ func joinMuc(room string) { // probeServerLiveness проверяет живость соединения с сервером. Для многих серверов обязательная штука, без которой // они выкидывают клиента через некоторое время неактивности. func probeServerLiveness() { //nolint:gocognit - defer gTomb.Done() - for { select { case <-gTomb.Dying(): + gTomb.Done() return default: @@ -330,6 +329,7 @@ func probeMUCLiveness() { //nolint:gocognit for { select { case <-gTomb.Dying(): + gTomb.Done() return default: @@ -394,11 +394,10 @@ func probeMUCLiveness() { //nolint:gocognit // RotateStatus периодически изменяет статус бота в MUC-е согласно настройкам из кофига. func RotateStatus(room string) { - defer gTomb.Done() - for { select { case <-gTomb.Dying(): + gTomb.Done() return default: diff --git a/main.go b/main.go index 9f73c9f..9b533ae 100644 --- a/main.go +++ b/main.go @@ -128,17 +128,22 @@ func main() { myLoop() log.Error(gTomb.Wait()) + + // Если у нас wire error, то вызов .Close() повлечёт за собой ошибку, но мы вынуждены звать .Close(), чтоб + // закрыть tls контекст и почистить всё что связанно с прерванным соединением. + _ = talk.Close() + time.Sleep(time.Duration(config.Jabber.ReconnectDelay) * time.Second) } } func myLoop() { - defer gTomb.Done() - for { select { case <-gTomb.Dying(): + gTomb.Done() return + default: // Зададим начальное значение глобальным переменным serverPingTimestampRx = 0