0

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.
This commit is contained in:
eleksir
2023-11-12 11:07:40 +03:00
parent fd98de36c3
commit 59976f2fe8
2 changed files with 10 additions and 6 deletions

7
lib.go
View File

@@ -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:

View File

@@ -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