43: def timeout_after(seconds)
44: new_timer = nil
45: @mutex.synchronize do
46: new_timer = timer_pool.add_timer seconds
47: timer_interval = timer_pool.next_trigger_interval_in_seconds
48: debug "==== Install Timer ==== at #{Time.now.to_i}, next interval: #{timer_interval}"
49: if timer_pool.first_timer?
50: install_first_timer_and_save_original_configuration timer_interval
51: else
52: install_next_timer timer_interval
53: end
54: end
55: return yield
56: ensure
57: @mutex.synchronize do
58: debug "==== Cleanup Timer ==== at #{Time.now.to_i}, #{new_timer} "
59: timer_pool.cancel new_timer
60: timer_pool.log_registered_timers if debug_enabled?
61: next_interval = timer_pool.next_trigger_interval_in_seconds
62: debug "Cleanup Timer : next interval #{next_interval.inspect} "
63: if next_interval
64: install_next_timer next_interval
65: else
66: restore_original_configuration
67: end
68: end
69: end