# RUBY\_DEBUG=gc\_stress \[FATAL\] failed to allocate memory

**URL:** <https://www.ruby-forum.com/t/ruby-debug-gc-stress-fatal-failed-to-allocate-memory/189696>\
**Category:** Development\
**Created:** [June 5, 2010, 1:43pm UTC](https://www.ruby-forum.com/t/ruby-debug-gc-stress-fatal-failed-to-allocate-memory/189696 "2010-06-05T13:43:55Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [June 5, 2010, 1:43pm UTC](https://www.ruby-forum.com/t/ruby-debug-gc-stress-fatal-failed-to-allocate-memory/189696/1 "2010-06-05T13:43:55Z")

</div>

e$B%3%s%Q%$%k;~$Ke(B RUBY\_DEBUG\_ENV e$B$H$$$&%^%/%m$rDj5A$7$F$\*$/$H!"e(B  
RUBY\_DEBUG e$B$H$$$&4D6-JQ?t$,M-8z$K$J$C$F!"e(B  
e$B:G=i$N:G=i$+$ie(B GC.stress e$B$r??$K$G$-$?$j$9$k$N$G$9$,!"e(B  
e$B8=:\_$O0J2\<$N$h$&$K$&$^$/F0$-$^$;$s!#e(B

% RUBY\_DEBUG=gc\_stress ./ruby -e ‘p GC.stress’  
[FATAL] failed to allocate memory

e$B$3$NLdBj$O!"e(BInit\_native\_thread() e$B$,8F$P$l$kA0$Ke(B GC  
e$B$,5/$-!"e(B  
garbage\_collect\_with\_gvl() e$B$NCf$Ne(B ruby\_thread\_has\_gvl\_p()  
e$B$,56$K$J$k$N$,e(B  
e$B860x$G$9!#e(B

e$B2r7h$9$k$K$Oe(B Init\_native\_thread e$B$r$b$C$HAa$/e(B  
(e$B:G=i$N%a%b%j3NJ]$h$jA0$Ke(B)  
e$B8F$Y$P$$$$$O$:$G!"0J2\<$N$h$&$K$7$F$b$$$$$G$7$g$&$+!#e(B

e$B$J$\*!"4D6-JQ?t$G@\_Dj$G$-$k$He(B rubyspec e$B$re(B GC.stress = true  
e$B$G\<B9T$9$k$J$I$Ke(B  
e$BJXMx$G$9!#e(B

# % 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();

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [June 5, 2010, 2:02pm UTC](https://www.ruby-forum.com/t/ruby-debug-gc-stress-fatal-failed-to-allocate-memory/189696/2 "2010-06-05T14:02:40Z")

</div>

2010/06/05 20:43 “Tanaka A.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

ã‚³ãƒ³ãƒ‘ã‚¤ãƒ«æ™‚ã« 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();

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [June 5, 2010, 2:16pm UTC](https://www.ruby-forum.com/t/ruby-debug-gc-stress-fatal-failed-to-allocate-memory/189696/3 "2010-06-05T14:16:07Z")

</div>

e$B?70f$G$9!#e(B

e$B$9$\_$^$;$s!#%a!\<%i$N8mA`:n$G0UL#$N$J$$%a!\<%k$rAw?.$7$F$7$^$$$^$7$?!#e(B  
e$B$sG/$V$j$N%a!\<%k$,$3$s$J$N$G?=$7Lu$"$j$^$;$s!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [June 5, 2010, 3:20pm UTC](https://www.ruby-forum.com/t/ruby-debug-gc-stress-fatal-failed-to-allocate-memory/189696/4 "2010-06-05T15:20:30Z")

</div>

e$B$J$+$@$G$9!#e(B

At Sat, 5 Jun 2010 20:42:24 +0900,  
Tanaka A. wrote in [ruby-dev:41536]:

> e$B2r7h$9$k$K$Oe(B Init\_native\_thread e$B$r$b$C$HAa$/e(B (e$B:G=i$N%a%b%j3NJ]$h$jA0$Ke(B)  
> e$B8F$Y$P$$$$$O$:$G!"0J2\<$N$h$&$K$7$F$b$$$$$G$7$g$&$+!#e(B

e$BJ9$$$?$h$&$JOC$@$J$H;W$C$?$i!"e(Bmvme$B%V%i%s%A$GF1$8$3$H$r$7$F$$$^$7$?!#e(B
