Issue #4983 has been updated by Motohiro KOSAKI.


??¥ä»¶??§ã????????????????«è³ª?????????????®ã?§ã?????????????¡ã?¤ã????¼ã?®ã?¹ã?¿ã????¯ã?µã?¤ã?ºã??

#define FIBER_MACHINE_STACK_ALLOCATION_SIZE  (0x10000 / sizeof(VALUE))

??®ã???????? sizeof(VALUE)??§ã?®å?²ã??ç®??????¥ã??????????¨ã?«ã????????sizeof(VALUE)??®å????°ã??ä¿???¨ã????¨ã????¦ã????????è·¡ã??????????¾ã????????
??¬ã?¼ã???????¼ã?¸ç?¨ã?«ï???????¼ã?¸é?????????¦ã????¾ã????®ã?§ã??çµ?å±?????????®ã?¹ã?¿ã????¯ã?µã?¤ã?ºã?? sizeof(VALUE)??®å????°ã?§ã?????ä¿?証ã??
??ªã???ªã?£ã?¦ã????¾ã?£ã?¦ã????¾ã?????
????????¯å????ªã????§ã???????????ï¼?????????¨ã??????³ã??誤読?????¦ã?¾ã??ï¼?
----------------------------------------
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