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:
7
lib.go
7
lib.go
@@ -218,11 +218,10 @@ func joinMuc(room string) {
|
|||||||
// probeServerLiveness проверяет живость соединения с сервером. Для многих серверов обязательная штука, без которой
|
// probeServerLiveness проверяет живость соединения с сервером. Для многих серверов обязательная штука, без которой
|
||||||
// они выкидывают клиента через некоторое время неактивности.
|
// они выкидывают клиента через некоторое время неактивности.
|
||||||
func probeServerLiveness() { //nolint:gocognit
|
func probeServerLiveness() { //nolint:gocognit
|
||||||
defer gTomb.Done()
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-gTomb.Dying():
|
case <-gTomb.Dying():
|
||||||
|
gTomb.Done()
|
||||||
return
|
return
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -330,6 +329,7 @@ func probeMUCLiveness() { //nolint:gocognit
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-gTomb.Dying():
|
case <-gTomb.Dying():
|
||||||
|
gTomb.Done()
|
||||||
return
|
return
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -394,11 +394,10 @@ func probeMUCLiveness() { //nolint:gocognit
|
|||||||
|
|
||||||
// RotateStatus периодически изменяет статус бота в MUC-е согласно настройкам из кофига.
|
// RotateStatus периодически изменяет статус бота в MUC-е согласно настройкам из кофига.
|
||||||
func RotateStatus(room string) {
|
func RotateStatus(room string) {
|
||||||
defer gTomb.Done()
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-gTomb.Dying():
|
case <-gTomb.Dying():
|
||||||
|
gTomb.Done()
|
||||||
return
|
return
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
9
main.go
9
main.go
@@ -128,17 +128,22 @@ func main() {
|
|||||||
myLoop()
|
myLoop()
|
||||||
|
|
||||||
log.Error(gTomb.Wait())
|
log.Error(gTomb.Wait())
|
||||||
|
|
||||||
|
// Если у нас wire error, то вызов .Close() повлечёт за собой ошибку, но мы вынуждены звать .Close(), чтоб
|
||||||
|
// закрыть tls контекст и почистить всё что связанно с прерванным соединением.
|
||||||
|
_ = talk.Close()
|
||||||
|
|
||||||
time.Sleep(time.Duration(config.Jabber.ReconnectDelay) * time.Second)
|
time.Sleep(time.Duration(config.Jabber.ReconnectDelay) * time.Second)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func myLoop() {
|
func myLoop() {
|
||||||
defer gTomb.Done()
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-gTomb.Dying():
|
case <-gTomb.Dying():
|
||||||
|
gTomb.Done()
|
||||||
return
|
return
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Зададим начальное значение глобальным переменным
|
// Зададим начальное значение глобальным переменным
|
||||||
serverPingTimestampRx = 0
|
serverPingTimestampRx = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user