lib/asir/transport.rb in asir-1.2.10 vs lib/asir/transport.rb in asir-1.2.11

- old
+ new

@@ -209,39 +209,54 @@ attr_accessor :running def stop! force = false @running = false stop_server! if respond_to?(:stop_server!) - raise Error::Terminate if force || @force_stop + if force || @force_stop + exc = @signal_exception || Error::Terminate.new("#{self} stop!") + @signal_exception = nil + raise exc + end self end def with_force_stop! force_stop_save = @force_stop - @force_stop = true - yield - ensure - @force_stop = force_stop_save + begin + @force_stop = true + yield + ensure + @force_stop = force_stop_save + end end def with_server_signals! old_trap = { } - [ "TERM", "HUP" ].each do | sig | - trap = proc do | *args | - stop! - @signal_exception = ::ASIR::Error::Terminate.new("#{self} by SIG#{sig} #{args.inspect} in #{__FILE__}:#{__LINE__}") + begin + in_with_server_signals = @in_with_server_signals + unless in_with_server_signals + @in_with_server_signals = true + [ "TERM", "HUP" ].each do | sig | + trap = proc do | *args | + @signal_exception = ::ASIR::Error::Terminate. + new("#{self} SIG#{sig} #{args.inspect} in #{__FILE__}:#{__LINE__}") + stop! + end + old_trap[sig] = Signal.trap(sig, trap) + end end - old_trap[sig] = Signal.trap(sig, trap) - end - yield - if exc = @signal_exception - @signal_exception = nil - raise exc - end - ensure - # $stderr.puts "old_trap = #{old_trap.inspect}" - old_trap.each do | sig, trap | - Signal.trap(sig, trap) rescue nil + yield + unless in_with_server_signals + if exc = @signal_exception + @signal_exception = nil + raise exc + end + end + ensure + # $stderr.puts "old_trap = #{old_trap.inspect}" + old_trap.each do | sig, trap | + Signal.trap(sig, trap) rescue nil + end end end # !SLIDE # Transport Support