Skip to content

Commit

Permalink
Fix panic when a signal is delivered before the server is instantiated (
Browse files Browse the repository at this point in the history
elastic#580)

Introduce a flag and a mutex in the beater so that we can't stop the server before assigning it (ie. read before write)
fixes elastic#514
  • Loading branch information
jalvz authored and Juan A committed Feb 1, 2018
1 parent 28fba6d commit 2bd8c15
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions beater/beater.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type beater struct {
mutex sync.Mutex // guards server and stopped
server *http.Server
stopped bool
logger *logp.Logger
}

// Creates beater
Expand All @@ -41,6 +42,7 @@ func New(b *beat.Beat, ucfg *common.Config) (beat.Beater, error) {
bt := &beater{
config: beaterConfig,
stopped: false,
logger: logp.NewLogger("beater"),
}
return bt, nil
}
Expand All @@ -56,7 +58,8 @@ func (bt *beater) Run(b *beat.Beat) error {

lis, err := net.Listen("tcp", bt.config.Host)
if err != nil {
logp.Err("failed to listen: %s", err)
bt.logger.Errorf("failed to listen: %s", err.Error())

return err
}
go notifyListening(bt.config, pub.Send)
Expand All @@ -72,15 +75,15 @@ func (bt *beater) Run(b *beat.Beat) error {

err = run(bt.server, lis, bt.config)
if err == http.ErrServerClosed {
logp.Info("Listener stopped: %s", err.Error())
bt.logger.Infof("Listener stopped: %s", err.Error())
return nil
}
return err
}

// Graceful shutdown
func (bt *beater) Stop() {
logp.Info("stopping apm-server...")
bt.logger.Info("stopping apm-server...")
bt.mutex.Lock()
if bt.server != nil {
stop(bt.server, bt.config.ShutdownTimeout)
Expand Down

0 comments on commit 2bd8c15

Please sign in to comment.