From: Motohiro KOSAKI Date: 2011-07-06T21:13:44+09:00 Subject: [ruby-dev:44043] [Ruby 1.9 - Bug #4983][Assigned] Fiberのガードページの設定が間違ってる Issue #4983 has been reported by Motohiro KOSAKI. ---------------------------------------- Bug #4983: Fiberのガードページの設定が間違ってる http://redmine.ruby-lang.org/issues/4983 Author: Motohiro KOSAKI Status: Assigned Priority: Normal Assignee: Motohiro KOSAKI Category: core Target version: 1.9.3 ruby -v: trunk 以下の関数でスタックのアロケーションとガードページの設定をしていますが、ガードページがPROT_READ|PROT_WRITEなのは なにかの間違いだと思います。あとで直しておきます。 static VALUE* fiber_machine_stack_alloc(size_t size) { VALUE *ptr; (snip) } else { void *page; STACK_GROW_DIR_DETECTION; ptr = (VALUE*)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); if (ptr == (VALUE*)(SIGNED_VALUE)-1) { rb_raise(rb_eFiberError, "can't alloc machine stack to fiber"); } page = ptr + STACK_DIR_UPPER((size - RB_PAGE_SIZE) / sizeof(VALUE), 0); if (mprotect(page, RB_PAGE_SIZE, PROT_READ | PROT_WRITE) < 0) { // ここ! rb_raise(rb_eFiberError, "mprotect failed"); -- http://redmine.ruby-lang.org