むらけんです.

ruby-1.8.0 では動作していた拡張ライブラリが ruby-1.8.1-preview2 では例
外を投げるようになってしまいました.簡略化したコードを以下に示します.

  #include <ruby.h>

  static VALUE
  ahi_ahi(VALUE obj)
  {
    rb_yield(Qnil);
  }

  static VALUE
  ahi_abort(VALUE obj)
  {
    rb_iter_break();
  }

  void
  Init_ahi(void)
  {
    VALUE cAhi = rb_define_class("Ahi", rb_cObject);
    rb_define_method(cAhi, "ahi", ahi_ahi, 0);
    rb_define_method(cAhi, "abort", ahi_abort, 0);
  }

この拡張モジュール (ahi.so とする) を以下のように用いると

  $ ruby -rahi -e "a = Ahi.new; a.ahi { a.abort }"
  -e:1:in `abort': unexpected break (LocalJumpError)
          from -e:1
          from -e:1:in `ahi'
          from -e:1

となってしまいます.ruby-1.8.0 では break されていました.

どのように解決すれば良いでしょうか?

-- 
1024D/2A3FDBE6 2001-08-26 Kenta MURATA (muraken) <muraken2 / nifty.com>
Key fingerprint = 622A 61D3 280F 4991 4833  5724 8E2D C5E1 2A3F DBE6