diff options
Diffstat (limited to 'lib/puppet.rb')
-rw-r--r-- | lib/puppet.rb | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/lib/puppet.rb b/lib/puppet.rb index 7615ec1c7..4514f82d6 100644 --- a/lib/puppet.rb +++ b/lib/puppet.rb @@ -317,12 +317,15 @@ module Puppet end def self.newtimer(hash, &block) - @timers ||= [] - timer = EventLoop::Timer.new(hash) - @timers << timer - - if block_given? - observe_signal(timer, :alarm, &block) + timer = nil + threadlock(:timers) do + @timers ||= [] + timer = EventLoop::Timer.new(hash) + @timers << timer + + if block_given? + observe_signal(timer, :alarm, &block) + end end # In case they need it for something else. @@ -429,12 +432,7 @@ module Puppet # Start all of our services and optionally our event loop, which blocks, # waiting for someone, somewhere, to generate events of some kind. def self.start(block = true) - #Puppet.info "Starting loop" # Starting everything in its own thread, fwiw - defined? @timers and @timers.each do |timer| - EventLoop.current.monitor_timer timer - end - defined? @services and @services.each do |svc| newthread do begin @@ -454,6 +452,16 @@ module Puppet exit(1) end + # We need to give the services a chance to register their timers before + # we try to start monitoring them. + sleep 0.5 + + if defined? @timers and ! @timers.empty? + @timers.each do |timer| + EventLoop.current.monitor_timer timer + end + end + if block EventLoop.current.run end |