Build error if PTHREAD_STACK_MIN is a function call

e$B1sF#$G$9!#e(B

OpenSolaris e$B$Ge(B ruby e$B$r%S%k%I$7$F$_$?$i%(%i!<$,=P$^$7$?!#e(B

In file included from thread.c:213:
thread_pthread.c:470: error: enumerator value for RUBY_STACK_MIN' not integer constant thread.c: In functionrb_fd_select’:
thread.c:2307: warning: implicit declaration of function
`select_large_fdset’
make: *** [thread.o] Error 1

PTHREAD_STACK_MIN e$B$NDj5A$,e(B

#define PTHREAD_STACK_MIN ((size_t)_sysconf(_SC_THREAD_STACK_MIN))

e$B$H$$$&4X?t8F$S=P$7$K$J$C$F$$$F!"$3$l$re(B enum
e$B$NCM$K$7$h$&$H$7$F$$$k$3$H$,e(B
e$B860x$G$9!#e(B#if (RUBY_STACK_MIN_LIMIT < PTHREAD_STACK_MIN)
e$B$J$I$b$G$-$^$;$s!#e(B

enum
e$B$G$J$/%0%m!<%P%kJQ?t$K$9$l$PF0$-$^$9$,!"$=$&$7$F$b$$$$$G$7$g$&$+!#e(B

OpenSolaris e$B$Oe(B supported e$B$G$be(B best effort
e$B$G$b$J$$$N$G9=$o$J$$$H$$$($Pe(B
e$B9=$o$J$$$N$G$9$,!"B>$N%W%i%C%H%U%)!<%`$G$b5/$-$k$+$b$7$l$J$$OC$G$9$7!“e(B
e$B$3$3$rD>$;$Pe(B make && make test
e$B$,DL$k$/$i$$$K$OF0$$$?$N$G!”$G$-$l$Pe(B
e$BD>$7$?$$$H;W$$$^$9!#e(B

diff --git a/thread_pthread.c b/thread_pthread.c
index c8ee4e1…43adc39 100644
— a/thread_pthread.c
+++ b/thread_pthread.c
@@ -264,6 +264,8 @@ static struct {
extern void *STACK_END_ADDRESS;
#endif

+static int RUBY_STACK_MIN_LIMIT, RUBY_STACK_MIN,
RUBY_STACK_SPACE_LIMIT, RUBY_STACK_SPACE;
+
#undef ruby_init_stack
void
ruby_init_stack(volatile VALUE *addr
@@ -301,6 +303,20 @@ ruby_init_stack(volatile VALUE *addr
}
}
#endif
+
+#ifdef SYMBIAN32

  • RUBY_STACK_MIN_LIMIT = 64 * 1024; /* 64KB: Let’s be slightly
    more frugal on mobile platform */
    +#else
  • RUBY_STACK_MIN_LIMIT = 512 * 1024; /* 512KB */
    +#endif
    +#ifdef PTHREAD_STACK_MIN
  • RUBY_STACK_MIN = (RUBY_STACK_MIN_LIMIT < PTHREAD_STACK_MIN) ?
    PTHREAD_STACK_MIN * 2 : RUBY_STACK_MIN_LIMIT;
    +#else
  • RUBY_STACK_MIN = RUBY_STACK_MIN_LIMIT;
    +#endif
  • RUBY_STACK_SPACE_LIMIT = 1024 * 1024;
  • RUBY_STACK_SPACE = (RUBY_STACK_MIN/5 > RUBY_STACK_SPACE_LIMIT ?
  •                   RUBY_STACK_SPACE_LIMIT : RUBY_STACK_MIN/5);
    

}

#define CHECK_ERR(expr)
@@ -457,22 +473,6 @@ use_cached_thread(rb_thread_t *th)
return result;
}

-enum {
-#ifdef SYMBIAN32

  • RUBY_STACK_MIN_LIMIT = 64 * 1024, /* 64KB: Let’s be slightly
    more frugal on mobile platform */
    -#else
  • RUBY_STACK_MIN_LIMIT = 512 * 1024, /* 512KB */
    -#endif
  • RUBY_STACK_MIN = (
    -#ifdef PTHREAD_STACK_MIN
  •   (RUBY_STACK_MIN_LIMIT < PTHREAD_STACK_MIN) ? PTHREAD_STACK_MIN * 
    

2 :
-#endif

  •   RUBY_STACK_MIN_LIMIT),
    
  • RUBY_STACK_SPACE_LIMIT = 1024 * 1024,
  • RUBY_STACK_SPACE = (RUBY_STACK_MIN/5 > RUBY_STACK_SPACE_LIMIT ?
  •                   RUBY_STACK_SPACE_LIMIT : RUBY_STACK_MIN/5)
    

-};

static int
native_thread_create(rb_thread_t *th)
{

Yuguie$B$G$9!#e(B

2009e$BG/e(B11e$B7ne(B22e$BF|e(B12:07 Yusuke ENDOH [email protected]:

e$B$H$$$&4X?t8F$S=P$7$K$J$C$F$$$F!"$3$l$re(B enum e$B$NCM$K$7$h$&$H$7$F$$$k$3$H$,e(B
e$B860x$G$9!#e(B#if (RUBY_STACK_MIN_LIMIT < PTHREAD_STACK_MIN) e$B$J$I$b$G$-$^$;$s!#e(B

e$B3:Ev$9$kItJ,$Oe(Bruby_1_9_1e$B$K$O$J$$$HG’<1$7$F$^$9$,!“$3$A$i$O%S%k%I$O$G$-$^$9$+e(B?
e$BFC$K!”@hF|e(Bupe$B$7$?%j%j!<%98uJd$N2>e(Btare$B6L$O$I$&$G$7$g$&e(B?

e$B1sF#$G$9!#e(B

2009e$BG/e(B11e$B7ne(B23e$BF|e(B5:18 Yugui [email protected]:

2009e$BG/e(B11e$B7ne(B22e$BF|e(B12:07 Yusuke ENDOH [email protected]:

e$B$H$$$&4X?t8F$S=P$7$K$J$C$F$$$F!"$3$l$re(B enum e$B$NCM$K$7$h$&$H$7$F$$$k$3$H$,e(B
e$B860x$G$9!#e(B#if (RUBY_STACK_MIN_LIMIT < PTHREAD_STACK_MIN) e$B$J$I$b$G$-$^$;$s!#e(B

e$B3:Ev$9$kItJ,$Oe(Bruby_1_9_1e$B$K$O$J$$$HG’<1$7$F$^$9$,!“$3$A$i$O%S%k%I$O$G$-$^$9$+e(B?
e$BFC$K!”@hF|e(Bupe$B$7$?%j%j!<%98uJd$N2>e(Btare$B6L$O$I$&$G$7$g$&e(B?

e$B$I$A$i$b%S%k%I$G$-$^$7$?!#e(B
e$B:G6aF~$C$?JQ99$N$h$&$G$9$M!#e(Br25725 e$B$re(B revert
e$B$9$l$P$h$5$=$&$G$9!#e(B

e$B$A$J$_$Ke(B ruby_1_9_1 e$B$H%j%j!<%98uJd$Ne(B make test
e$B$O6&$K0J2<$G<:GT$7$^$9!#e(B
e$B860x$OD4$Y$F$^$;$s!#e(B

#2 test_io.rb:11:in `<top (required)>':
begin
require “io/nonblock”
r, w = IO.pipe
w.nonblock = true
w.write_nonblock(“a” * 100000)
w.nonblock = false
t1 = Thread.new { w.write(“b” * 4096) }
t2 = Thread.new { w.write(“c” * 4096) }
sleep 0.5
r.sysread(4096).length
sleep 0.5
r.sysread(4096).length
t1.join
t2.join
rescue LoadError
end
#=> not finished in 10 seconds [ruby-dev:32566]
FAIL 1/940 tests failed
make: *** [btest-ruby] Error 1

e$B$^$?!"e(Bmake test-all
e$B$O0J2<$N$h$&$K$J$C$FAv$j=P$7$^$;$s$G$7$?!#$3$l$Oe(B
r22802 e$B$r%P%C%/%]!<%H$9$l$PD>$j$=$&$G$9e(B
(e$B3NG’$O$7$F$^$;$s$9$_$^$;$se(B) e$B!#e(B

$ make test-all
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb
./runruby.rb --extout=.ext – “./test/runner.rb”
./test/runner.rb