diff --git a/pkg/acquisition/modules/syslog/internal/syslogserver.go b/pkg/acquisition/modules/syslog/internal/syslogserver.go index 4553078cb..ca07f6545 100644 --- a/pkg/acquisition/modules/syslog/internal/syslogserver.go +++ b/pkg/acquisition/modules/syslog/internal/syslogserver.go @@ -61,7 +61,7 @@ func (s *SyslogServer) StartServer() *tomb.Tomb { for { select { case <-t.Dying(): - s.Logger.Info("syslog server tomb is dying") + s.Logger.Info("Syslog server tomb is dying") err := s.KillServer() return err default: @@ -92,5 +92,6 @@ func (s *SyslogServer) KillServer() error { if err != nil { return errors.Wrap(err, "could not close UDP connection") } + close(s.channel) return nil } diff --git a/pkg/acquisition/modules/syslog/syslog.go b/pkg/acquisition/modules/syslog/syslog.go index 39940ac1d..ebc0b1605 100644 --- a/pkg/acquisition/modules/syslog/syslog.go +++ b/pkg/acquisition/modules/syslog/syslog.go @@ -180,15 +180,15 @@ func (s *SyslogSource) buildLogFromSyslog(ts *time.Time, hostname *string, } func (s *SyslogSource) handleSyslogMsg(out chan types.Event, t *tomb.Tomb, c chan syslogserver.SyslogMessage) error { + killed := false for { select { case <-t.Dying(): - s.logger.Info("Syslog datasource is dying") - s.serverTomb.Kill(nil) - return s.serverTomb.Wait() - case <-s.serverTomb.Dying(): - s.logger.Info("Syslog server is dying, exiting") - return nil + if !killed { + s.logger.Info("Syslog datasource is dying") + s.serverTomb.Kill(nil) + killed = true + } case <-s.serverTomb.Dead(): s.logger.Info("Syslog server has exited") return nil