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