# Stack overflow by GC in a thread

**URL:** <https://www.ruby-forum.com/t/stack-overflow-by-gc-in-a-thread/123203>\
**Category:** Development\
**Created:** [December 14, 2007, 10:10pm UTC](https://www.ruby-forum.com/t/stack-overflow-by-gc-in-a-thread/123203 "2007-12-14T22:10:01Z")\
**Posts on this page:** 1\
**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:** [December 14, 2007, 10:10pm UTC](https://www.ruby-forum.com/t/stack-overflow-by-gc-in-a-thread/123203/1 "2007-12-14T22:10:01Z")

</div>

e$B0J2\<$N$h$&$K$9$k$He(B SEGV e$B$7$^$9!#e(B

% ./ruby -v -rstringio -e ‘s = “a”  
10000.times {  
s = “a”.instance\_eval { @a = StringIO.new(s); self }  
}  
Thread.new { GC.start }.join’  
ruby 1.9.0 (2007-12-15 patchlevel 0) [i686-linux]  
zsh: segmentation fault (core dumped) ./ruby -v -rstringio -e

e$B$I$&$be(B GC e$B$Ne(B mark e$B;~$N:F5"$Ge(B stack overflow  
e$B$7$F$$$k$h$&$G$9!#e(B

StringIO e$B$Oe(B T\_DATA e$B$J$N$Ge(B lev  
e$B$O8z$+$J$/$F!"%9%l%C%I$N%9%?%Ce(B  
e$B%/%5%$%:$O8!::$5$l$F$$$J$$$h$&$G!#e(B

e$B$J$\*!":G=i$KH/8+$7$?$N$Oe(B StringIO e$B$8$c$J$/$Fe(B ISeq e$B$Ne(B  
mark\_ary e$B$de(B cref\_stack e$B$K$h$k:F5"$G$7$?!#$=$l$N$?$a$Ke(B IA64  
e$B$Ge(B test-all e$B$,:G8e$^$G$$$+$J$+$C$?$N$GG$KA}$d$7$?$N$G$9$,!"e(B  
e$B$3$l$r$I$&$K$+$9$l$PA}$d$5$J$/$F$b$$$$$N$+$b!#e(B

Program terminated with signal 11, Segmentation fault.  
#0 0x080629a5 in gc\_mark\_children (ptr=3082942460, lev=1) at gc.c:873  
873 register RVALUE \*obj = RANY(ptr);  
(gdb) bt  
#0 0x080629a5 in gc\_mark\_children (ptr=3082942460, lev=1) at gc.c:873  
#1 0x08062950 in gc\_mark (ptr=3082942460, lev=0) at gc.c:861  
#2 0x0806299a in rb\_gc\_mark (ptr=3082942460) at gc.c:867  
#3 0xb7cad47c in strio\_mark (ptr=0x8408ec8) at stringio.c:54  
#4 0x08062d8c in gc\_mark\_children (ptr=3082942320, lev=1) at gc.c:1069  
#5 0x08062950 in gc\_mark (ptr=3082942320, lev=0) at gc.c:861  
#6 0x0806274a in mark\_entry (key=9449, value=3082942320, lev=0) at  
gc.c:770  
#7 0x080d1665 in st\_foreach (table=0x8408ee0, func=0x8062732  
\<mark\_entry\>, arg=0) at st.c:593  
#8 0x08062777 in mark\_tbl (tbl=0x8408ee0, lev=0) at gc.c:778  
#9 0x08062792 in rb\_mark\_tbl (tbl=0x8408ee0) at gc.c:784  
#10 0x080f1be8 in rb\_mark\_generic\_ivar (obj=3082942380) at  
variable.c:864  
#11 0x08062a27 in gc\_mark\_children (ptr=3082942380, lev=1) at gc.c:886  
#12 0x08062950 in gc\_mark (ptr=3082942380, lev=0) at gc.c:861  
#13 0x0806299a in rb\_gc\_mark (ptr=3082942380) at gc.c:867  
#14 0xb7cad47c in strio\_mark (ptr=0x8408fe8) at stringio.c:54  
#15 0x08062d8c in gc\_mark\_children (ptr=3082942240, lev=1) at gc.c:1069  
#16 0x08062950 in gc\_mark (ptr=3082942240, lev=0) at gc.c:861  
#17 0x0806274a in mark\_entry (key=9449, value=3082942240, lev=0) at  
gc.c:770  
#18 0x080d1665 in st\_foreach (table=0x8409000, func=0x8062732  
\<mark\_entry\>, arg=0) at st.c:593  
#19 0x08062777 in mark\_tbl (tbl=0x8409000, lev=0) at gc.c:778  
#20 0x08062792 in rb\_mark\_tbl (tbl=0x8409000) at gc.c:784  
#21 0x080f1be8 in rb\_mark\_generic\_ivar (obj=3082942300) at  
variable.c:864  
#22 0x08062a27 in gc\_mark\_children (ptr=3082942300, lev=1) at gc.c:886  
#23 0x08062950 in gc\_mark (ptr=3082942300, lev=0) at gc.c:861  
#24 0x0806299a in rb\_gc\_mark (ptr=3082942300) at gc.c:867  
#25 0xb7cad47c in strio\_mark (ptr=0x8409108) at stringio.c:54  
#26 0x08062d8c in gc\_mark\_children (ptr=3082942160, lev=1) at gc.c:1069  
#27 0x08062950 in gc\_mark (ptr=3082942160, lev=0) at gc.c:861  
#28 0x0806274a in mark\_entry (key=9449, value=3082942160, lev=0) at  
gc.c:770  
#29 0x080d1665 in st\_foreach (table=0x8409120, func=0x8062732  
\<mark\_entry\>, arg=0) at st.c:593  
#30 0x08062777 in mark\_tbl (tbl=0x8409120, lev=0) at gc.c:778  
#31 0x08062792 in rb\_mark\_tbl (tbl=0x8409120) at gc.c:784  
#32 0x080f1be8 in rb\_mark\_generic\_ivar (obj=3082942220) at  
variable.c:864  
#33 0x08062a27 in gc\_mark\_children (ptr=3082942220, lev=1) at gc.c:886  
#34 0x08062950 in gc\_mark (ptr=3082942220, lev=0) at gc.c:861  
#35 0x0806299a in rb\_gc\_mark (ptr=3082942220) at gc.c:867  
#36 0xb7cad47c in strio\_mark (ptr=0x8409228) at stringio.c:54  
#37 0x08062d8c in gc\_mark\_children (ptr=3082942080, lev=1) at gc.c:1069  
#38 0x08062950 in gc\_mark (ptr=3082942080, lev=0) at gc.c:861  
#39 0x0806274a in mark\_entry (key=9449, value=3082942080, lev=0) at  
gc.c:770  
…
