Hi all,
This is a summary of ruby-dev ML in these days.
[ruby-dev:25755] I/O operation differs signal handler
Minero Aoki reported that ruby does not execute pure ruby signal
handlers while reading from a stream. e.g.
Signal.trap(:TERM) { puts 'TERM'; exit }
while true
p $stdin.gets
end
This program does not exit until $stdin.gets returns.
Pure ruby signal handlers are not executed, because calling ruby
code from signal handler is dangerous. So we must take following
steps:
1. exit signal handler,
2. interrupt/finish system call,
3. update ruby's I/O buffer correctly,
4. then call pure ruby signal handler.
But difficulties are still lying here:
* read(2) will never be interrupted by signals because ruby set
SA_RESTART option (see also sigaction(2)).
* The return value of read(2) is required to update I/O buffer.
So we cannot update I/O buffer until system call is finished.
We need a safe and portable solution for this problem.
[ruby-dev:25780] Proc generation without `proc'
Nobuyoshi Nakada posted a patch to allow generating Proc object
without `proc' or `lambda' shortly. e.g.
x = {|a| p a } # == proc {|a| p a }
x.call
x = (do |a| p a end) # == proc do |a| p a end
x.call
This experimental patch was incorporated in to CVS HEAD.
-- Minero Aoki
ruby-dev summary index: http://i.loveruby.net/en/ruby-dev-summary.html