まつもと ゆきひろです

In message "[ruby-dev:21794] ruby-1.8.1-preview2 	での rb_iter_break"
    on 03/10/31, Kenta MURATA <muraken2 / nifty.com> writes:

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

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

これは仕様変更(というか、今まで偶然動いていた)ものです。
正しくは

|  #include <ruby.h>
|
|  static VALUE
|  ahi_ahi(VALUE obj)
|  {
|    rb_catch("ahi", rb_yield, Qnil);
|  }
|
|  static VALUE
|  ahi_abort(VALUE obj)
|  {
|    rb_throw("ahi", Qnil);
|  }
|
|  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);
|  }

としてください。むやみにbreakをつかうのでなく、こういう目的
にはcatch/throwがお薦めです。

                                まつもと ゆきひろ /:|)