diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 19afa10de673..5cab9da8759e 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -149,6 +149,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - system/socket: Fix dataset using 100% CPU and becoming unresponsive in some scenarios. {pull}19033[19033] - system/socket: Fixed tracking of long-running connections. {pull}19033[19033] - system/package: Fix librpm loading on Fedora 31/32. {pull}NNNN[NNNN] +- file_integrity: Create fsnotify watcher only when starting file_integrity module {pull}19505[19505] *Filebeat* diff --git a/auditbeat/module/file_integrity/eventreader_fsnotify.go b/auditbeat/module/file_integrity/eventreader_fsnotify.go index 4c59191dfe71..4d82015b90d9 100644 --- a/auditbeat/module/file_integrity/eventreader_fsnotify.go +++ b/auditbeat/module/file_integrity/eventreader_fsnotify.go @@ -39,20 +39,22 @@ type reader struct { // NewEventReader creates a new EventProducer backed by fsnotify. func NewEventReader(c Config) (EventProducer, error) { - watcher, err := monitor.New(c.Recursive) - if err != nil { - return nil, err - } - return &reader{ - watcher: watcher, - config: c, - log: logp.NewLogger(moduleName), + config: c, + log: logp.NewLogger(moduleName), }, nil } func (r *reader) Start(done <-chan struct{}) (<-chan Event, error) { + watcher, err := monitor.New(r.config.Recursive) + if err != nil { + return nil, err + } + + r.watcher = watcher if err := r.watcher.Start(); err != nil { + // Ensure that watcher is closed so that we don't leak watchers + r.watcher.Close() return nil, errors.Wrap(err, "unable to start watcher") }