コンパイル時に RUBY_DEBUG_ENV というマクロを定義しておくと、
RUBY_DEBUG という環境変数が有効になって、
最初の最初から GC.stress を真にできたりするのですが、
現在は以下のようにうまく動きません。

  % RUBY_DEBUG=gc_stress ./ruby -e 'p GC.stress'
  [FATAL] failed to allocate memory

この問題は、Init_native_thread() が呼ばれる前に GC が起き、
garbage_collect_with_gvl() の中の ruby_thread_has_gvl_p() が偽になるのが
原因です。

解決するには Init_native_thread をもっと早く (最初のメモリ確保より前に)
呼べばいいはずで、以下のようにしてもいいでしょうか。

なお、環境変数で設定できると rubyspec を GC.stress = true で実行するなどに
便利です。

% svn diff --diff-cmd diff -x '-u -p'
Index: thread.c
===================================================================
--- thread.c	(revision 28173)
+++ thread.c	(working copy)
@@ -4239,7 +4239,6 @@ Init_Thread(void)
     rb_define_method(rb_cThread, "add_trace_func", thread_add_trace_func_m, 1);

     /* init thread core */
-    Init_native_thread();
     {
 	/* main thread setting */
 	{
Index: vm.c
===================================================================
--- vm.c	(revision 28173)
+++ vm.c	(working copy)
@@ -2110,6 +2110,8 @@ struct rb_objspace *rb_objspace_alloc(vo
 #endif
 void ruby_thread_init_stack(rb_thread_t *th);

+extern void Init_native_thread(void);
+
 void
 Init_BareVM(void)
 {
@@ -2130,6 +2132,7 @@ Init_BareVM(void)
 #endif
     ruby_current_vm = vm;

+    Init_native_thread();
     th_init2(th, 0);
     th->vm = vm;
     ruby_thread_init_stack(th);
Index: thread_pthread.c
===================================================================
--- thread_pthread.c	(revision 28173)
+++ thread_pthread.c	(working copy)
@@ -163,7 +163,7 @@ ruby_thread_set_native(rb_thread_t *th)
     return pthread_setspecific(ruby_native_thread_key, th) == 0;
 }

-static void
+void
 Init_native_thread(void)
 {
     rb_thread_t *th = GET_THREAD();
Index: thread_win32.c
===================================================================
--- thread_win32.c	(revision 28173)
+++ thread_win32.c	(working copy)
@@ -44,7 +44,7 @@ ruby_thread_set_native(rb_thread_t *th)
     return TlsSetValue(ruby_native_thread_key, th);
 }

-static void
+void
 Init_native_thread(void)
 {
     rb_thread_t *th = GET_THREAD();
-- 
[田中 哲][たなか あきら][Tanaka Akira]