diff --git a/activesupport/lib/active_support/evented_file_update_checker.rb b/activesupport/lib/active_support/evented_file_update_checker.rb index c0ad21b0dfedb..063839f5af69c 100644 --- a/activesupport/lib/active_support/evented_file_update_checker.rb +++ b/activesupport/lib/active_support/evented_file_update_checker.rb @@ -13,8 +13,7 @@ module ActiveSupport # EventedFileUpdateChecker#execute is run or when EventedFileUpdateChecker#execute_if_updated # is run and there have been changes to the file system. # - # Note: To start listening to change events you must first call - # EventedFileUpdateChecker#updated? inside of each process. + # Note: Forking will cause the first call to `updated?` to return `true`. # # Example: # @@ -41,10 +40,11 @@ def initialize(files, dirs = {}, &block) @dirs[@ph.xpath(dir)] = Array(exts).map { |ext| @ph.normalize_extension(ext) } end - @block = block - @updated = Concurrent::AtomicBoolean.new(false) - @lcsp = @ph.longest_common_subpath(@dirs.keys) - @pid_hash = Concurrent::Hash.new + @block = block + @updated = Concurrent::AtomicBoolean.new(false) + @lcsp = @ph.longest_common_subpath(@dirs.keys) + @pid_hash = Concurrent::Hash.new + @parent_pid = Process.pid if (@dtw = directories_to_watch).any? # Loading listen triggers warnings. These are originated by a legit @@ -58,6 +58,7 @@ def initialize(files, dirs = {}, &block) end end end + boot! end def updated? @@ -82,6 +83,7 @@ def execute_if_updated def boot! Listen.to(*@dtw, &method(:changed)).start @pid_hash[Process.pid] = true + @updated.make_true if @parent_pid != Process.pid end def changed(modified, added, removed)