From 8802842607c98133393d7fab1ca500eeca080d4e Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 8 Oct 2013 01:44:45 +0000 Subject: cont.c: supplement comments of FIBER_USE_NATIVE * cont.c (FIBER_USE_NATIVE): supplement comments the reason why it is disabled. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- cont.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 'cont.c') diff --git a/cont.c b/cont.c index d09b21bb31..fe00cb35c7 100644 --- a/cont.c +++ b/cont.c @@ -15,20 +15,6 @@ #include "gc.h" #include "eval_intern.h" -#if !defined(FIBER_USE_NATIVE) -# if defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT) -# if defined(__NetBSD__) -# elif defined(__sun) -# elif defined(__ia64) -# else -# define FIBER_USE_NATIVE 1 -# endif -# elif defined(_WIN32) -# if _WIN32_WINNT >= 0x0400 -# define FIBER_USE_NATIVE 1 -# endif -# endif - /* FIBER_USE_NATIVE enables Fiber performance improvement using system * dependent method such as make/setcontext on POSIX system or * CreateFiber() API on Windows. @@ -40,11 +26,36 @@ * in Proc. of 51th Programming Symposium, pp.21--28 (2010) (in Japanese). */ +#if !defined(FIBER_USE_NATIVE) +# if defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT) +# if 0 +# elif defined(__NetBSD__) /* On our experience, NetBSD doesn't support using setcontext() and pthread * simultaneously. This is because pthread_self(), TLS and other information * are represented by stack pointer (higher bits of stack pointer). * TODO: check such constraint on configure. */ +# define FIBER_USE_NATIVE 0 +# elif defined(__sun) +/* On Solaris because resuming any Fiber caused SEGV, for some reason. + */ +# define FIBER_USE_NATIVE 0 +# elif defined(__ia64) +/* At least, Linux/ia64's getcontext(3) doesn't save register window. + */ +# define FIBER_USE_NATIVE 0 +# else +# define FIBER_USE_NATIVE 1 +# endif +# elif defined(_WIN32) +# if _WIN32_WINNT >= 0x0400 +/* only when _WIN32_WINNT >= 0x0400 on Windows because Fiber APIs are + * supported only such building (and running) environments. + * [ruby-dev:41192] + */ +# define FIBER_USE_NATIVE 1 +# endif +# endif #endif #if !defined(FIBER_USE_NATIVE) #define FIBER_USE_NATIVE 0 -- cgit v1.2.3