def trigger(t=Time.now)
@last = t
job_thread = nil
to_job = nil
return if @running and (params[:allow_overlapping] == false)
@running = true
@scheduler.send(:trigger_job, @params[:blocking]) do
job_thread = Thread.current
job_thread[
"rufus_scheduler__trigger_thread__#{@scheduler.object_id}"
] = true
@last_job_thread = job_thread
begin
trigger_block
job_thread = nil
to_job.unschedule if to_job
rescue Exception => e
@scheduler.handle_exception(self, e)
end
@running = false
end
if to = @params[:timeout]
to_job = @scheduler.in(to, :parent => self, :tags => 'timeout') do
if job_thread && job_thread.alive?
job_thread.raise(Rufus::Scheduler::TimeOutError)
end
end
end
end