From: Yukihiro Matsumoto Date: 2008-04-12T21:28:15+09:00 Subject: [ruby-dev:34358] Re: SEGV by regexp and thread まつもと ゆきひろです In message "Re: [ruby-dev:34223] SEGV by regexp and thread" on Wed, 2 Apr 2008 20:38:24 +0900, Tanaka Akira writes: |以下のようにすると SEGV します。 onig_search()の途中でRUBY_VM_CHECK_INTS()が呼ばれ、そこでコ ンテキストスイッチが呼ばれるため、同じ正規表現オブジェクトに 対してrb_reg_prepare_re()が呼ばれて使用中のregex_tがfreeされ てしまうため、このような現象が起きるようです。 リエントラントでない関数でも割り込みチェックを行いたいことが あるため、RUBY_VM_CHECK_INTS()ではコンテキストスイッチを行っ てはいけないのだと思います。 実際、rb_thread_execute_interrupts()からrb_thread_schedule() を削るとこの問題は発生しません。 しかし、これを削ってしまうとbootstraptest/test_thread.rbがう まく動かなくなってしまうんですよねえ。どうやって両立させたら よいのか分かりません。