add waitGroups for waiting finish all connects #131

Merged
vtolstov merged 7 commits from devstigneev/micro-server-tcp:issue_130 into v3 2024-03-13 15:36:35 +03:00
Showing only changes of commit d7288c7130 - Show all commits

3
tcp.go
View File

@ -430,13 +430,12 @@ func (h *tcpServer) gracefulStop() {
done := make(chan struct{}) done := make(chan struct{})
go func() { go func() {
h.opts.Wait.Wait() h.opts.Wait.Wait()
vtolstov marked this conversation as resolved Outdated

смотри, лучше сделать канал и если вейтгруппа кончилась- прямо там закрывать канал, тогда в селекте мы сразу попадем на нужный кейс

смотри, лучше сделать канал и если вейтгруппа кончилась- прямо там закрывать канал, тогда в селекте мы сразу попадем на нужный кейс

да, я прикинул потом, что закрытие нужно сместить

да, я прикинул потом, что закрытие нужно сместить
done <- struct{}{} close(done)
}() }()
select { select {
case <-tm.C: case <-tm.C:
case <-done: case <-done:

Тут мы ждем либо у нас концертны все закрылись и вызвался cancel()
либо ctx.Done выполнился по GracefulTimeout

Тут мы ждем либо у нас концертны все закрылись и вызвался cancel() либо ctx.Done выполнился по GracefulTimeout

если я использую time.Timer, не совсем смог прийти к решению, что я его в ручную остановил и мог без препятствий завершить метод

если я использую time.Timer, не совсем смог прийти к решению, что я его в ручную остановил и мог без препятствий завершить метод

но возникает другая проблема, если Wait - залочился, то горутина с ней утекла

но возникает другая проблема, если Wait - залочился, то горутина с ней утекла
close(done)
} }
} }