At_exit, trap sigint, and sleep. no good in 1.8, ok in 1.6

Any ideas about why the following code hangs in 1.8
(under WinXP) but works fine in 1.6. (This is a major
simplification of some Ctrl-C handling from a larger
project. I don't just have a thing against cats.)
The run results are below.

Thanks.
(Please let me know if this was more suitable for
ruby_core.)

----- dog.rb -------------------------------------

at_exit {
  puts "Dog: at_exit"
  
  trap("SIGINT") {
    puts "Dog: killing cat..."
    Cat.die
    puts "Dog: cat whacked."
  }
  
  Cat.run
  puts "Dog: cat runs no more."
}

----- cat.rb -------------------------------------

require "dog"

module Cat
  def Cat.run
    @@done = false
    until @@done
      puts "Cat: yawn"
      sleep(2)
    end
    puts "Cat: eehhkk."
  end
  
  def Cat.die
    @@done = true
    puts "Cat: eeeiiiiyyyeee!"
  end
end

----- results ------------------------------------

\ruby-1.6.8\bin\ruby.exe -v cat.rb

ruby 1.6.8 (2002-12-24) [i586-mswin32]
Dog: at_exit
Cat: yawn
Cat: yawn
[I press Ctrl+c]
Dog: killing cat...
Cat: eeeiiiiyyyeee!
Dog: cat whacked.
Cat: eehhkk.
Dog: cat runs no more.

\ruby-1.8.2\bin\ruby.exe -v cat.rb

ruby 1.8.2 (2004-07-29) [i386-mswin32]
Dog: at_exit
Cat: yawn
Cat: yawn
Cat: yawn
[I press Ctrl+c]
Dog: killing cat...
Cat: eeeiiiiyyyeee!
Dog: cat whacked.

[and here we stay forever.]

···

__________________________________
Do you Yahoo!?
Read only the mail you want - Yahoo! Mail SpamGuard.
http://promotions.yahoo.com/new_mail

FWIW, it works fine on linux with both 1.8.2-preview1 and CVS head.
Perhaps the implementation of cat for windows was never de-clawed, and
could therefore fight back against the dog. :slight_smile:

Paul