# \[Bug: trunk\] rb\_gc\_mark(): unknown data type

**URL:** <https://www.ruby-forum.com/t/bug-trunk-rb-gc-mark-unknown-data-type/192157>\
**Category:** Development\
**Created:** [July 25, 2010, 5:37am UTC](https://www.ruby-forum.com/t/bug-trunk-rb-gc-mark-unknown-data-type/192157 "2010-07-25T05:37:23Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![SASADA\_Koichi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f1d935/32.png) [@SASADA\_Koichi](https://www.ruby-forum.com/u/SASADA_Koichi)\
**Post date:** [July 25, 2010, 5:37am UTC](https://www.ruby-forum.com/t/bug-trunk-rb-gc-mark-unknown-data-type/192157/1 "2010-07-25T05:37:23Z")

</div>

e$B!!$5$5$@$G$9!#e(B

e$B!!\>$7$/DI$C$F$$$J$$$N$G$9$,!"e(B[BUG] e$B$,=P$^$7$?!#:G=i$Oe(B  
mswin32 e$B$G=P2q$Ce(B  
e$B$F!"e(Bruby 1.9.3dev (2010-07-25 trunk 28751) [x86\_64-linux]  
e$B$G:F8=$9$k$3$He(B  
e$B$r3NG’$7$^$7$?!#e(B

$ cat …/trunk/test.rb  
class C  
def initialize max  
@max = max  
end

def size  
rand(@max)  
end  
end

ary = []  
loop{  
ary \<\< C.new(ary.size)  
ary.sort\_by{|e| e.size}  
puts ‘.’  
}

$ make gdb  
e$B!JCfN,!Ke(B  
…/trunk/test.rb:14: [BUG] rb\_gc\_mark(): unknown data type  
0x10(0x82e160) non object  
ruby 1.9.3dev (2010-07-25 trunk 28751) [x86\_64-linux]

## – control frame ---------- c:0009 p:---- s:0021 b:0021 l:000016 d:000020 IFUNC c:0008 p:---- s:0019 b:0019 l:000018 d:000018 CFUNC :each c:0007 p:---- s:0017 b:0017 l:000016 d:000016 CFUNC :sort\_by c:0006 p:0037 s:0014 b:0014 l:001868 d:000013 BLOCK …/trunk/test.rb:14 c:0005 p:---- s:0012 b:0012 l:000011 d:000011 FINISH c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC :loop c:0003 p:0026 s:0007 b:0007 l:001868 d:0002b0 EVAL …/trunk/test.rb:12 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH c:0001 p:0000 s:0002 b:0002 l:001868 d:001868 TOP

## – Ruby level backtrace information

…/trunk/test.rb:12:in `<main>' ../trunk/test.rb:12:in `loop’  
…/trunk/test.rb:14:in `block in <main>' ../trunk/test.rb:14:in `sort\_by’  
…/trunk/test.rb:14:in `each’

## – C level backtrace information

/mnt/sdb1/ruby/build/miniruby(rb\_vm\_bugreport+0xa9) [0x57e9d9]  
/mnt/sdb1/ruby/build/miniruby [0x452e76]  
/mnt/sdb1/ruby/build/miniruby(rb\_bug+0xb1) [0x452ff1]  
/mnt/sdb1/ruby/build/miniruby [0x46be06]  
/mnt/sdb1/ruby/build/miniruby(rb\_thread\_mark+0x9e) [0x567c0e]  
/mnt/sdb1/ruby/build/miniruby [0x46c5da]  
/mnt/sdb1/ruby/build/miniruby [0x567ab9]  
/mnt/sdb1/ruby/build/miniruby(st\_foreach+0x4c) [0x5133bc]  
/mnt/sdb1/ruby/build/miniruby(rb\_vm\_mark+0x27) [0x567f77]  
/mnt/sdb1/ruby/build/miniruby [0x46c5da]  
/mnt/sdb1/ruby/build/miniruby [0x46dbb2]  
/mnt/sdb1/ruby/build/miniruby [0x46ec00]  
/mnt/sdb1/ruby/build/miniruby(rb\_node\_newnode+0x64) [0x46eff4]  
/mnt/sdb1/ruby/build/miniruby [0x44e7e6]  
/mnt/sdb1/ruby/build/miniruby [0x56d405]  
/mnt/sdb1/ruby/build/miniruby(rb\_yield+0x69) [0x579b29]  
/mnt/sdb1/ruby/build/miniruby(rb\_ary\_each+0x45) [0x41f705]  
/mnt/sdb1/ruby/build/miniruby [0x56e44b]  
/mnt/sdb1/ruby/build/miniruby(rb\_iterate+0xd3) [0x569433]  
/mnt/sdb1/ruby/build/miniruby(rb\_block\_call+0x29) [0x5695d9]  
/mnt/sdb1/ruby/build/miniruby [0x44d62c]  
/mnt/sdb1/ruby/build/miniruby [0x571837]  
/mnt/sdb1/ruby/build/miniruby [0x572dd9]  
/mnt/sdb1/ruby/build/miniruby [0x578088]  
/mnt/sdb1/ruby/build/miniruby [0x57a0d2]  
/mnt/sdb1/ruby/build/miniruby(rb\_rescue2+0x15b) [0x45764b]  
/mnt/sdb1/ruby/build/miniruby [0x569609]  
/mnt/sdb1/ruby/build/miniruby [0x571837]  
/mnt/sdb1/ruby/build/miniruby [0x572dd9]  
/mnt/sdb1/ruby/build/miniruby [0x578088]  
/mnt/sdb1/ruby/build/miniruby(rb\_iseq\_eval\_main+0x288) [0x578408]  
/mnt/sdb1/ruby/build/miniruby [0x4579c3]  
/mnt/sdb1/ruby/build/miniruby(ruby\_run\_node+0x36) [0x4596e6]  
/mnt/sdb1/ruby/build/miniruby(main+0x4d) [0x41a3bd]  
/lib/libc.so.6(\_\_libc\_start\_main+0xe6) [0x2accb98201a6]  
/mnt/sdb1/ruby/build/miniruby [0x41a2a9]

[NOTE]  
You may have encountered a bug in the Ruby interpreter or extension  
libraries.  
Bug reports are welcome.  
For details: [http://www.ruby-lang.org/bugreport.html](http://www.ruby-lang.org/bugreport.html)

Program received signal SIGABRT, Aborted.  
[Switching to Thread 0x2accb9b56290 (LWP 27505)]  
0x00002accb9833ed5 in raise () from /lib/libc.so.6  
(gdb) bt  
#0 0x00002accb9833ed5 in raise () from /lib/libc.so.6  
#1 0x00002accb98353f3 in abort () from /lib/libc.so.6  
#2 0x0000000000452ff6 in rb\_bug (fmt=0x58fbc0 “rb\_gc\_mark(): unknown  
data type 0x%x(%p) %s”) at …/trunk/error.c:253  
#3 0x000000000046be06 in gc\_mark\_children (objspace=0x823dd0,  
ptr=8577376, lev=1) at …/trunk/gc.c:1820  
#4 0x0000000000567c0e in rb\_thread\_mark (ptr=0x823a50) at  
…/trunk/vm.c:1650  
#5 0x000000000046c5da in gc\_mark\_children (objspace=0x823dd0,  
ptr=8858200, lev=1) at …/trunk/gc.c:1756  
#6 0x0000000000567ab9 in vm\_mark\_each\_thread\_func (key=27505,  
value=27505, dummy=6) at …/trunk/vm.c:1475  
#7 0x00000000005133bc in st\_foreach (table=0x92ba60, func=0x567ab0  
\<vm\_mark\_each\_thread\_func\>, arg=0) at …/trunk/st.c:747  
#8 0x0000000000567f77 in rb\_vm\_mark (ptr=0x823550) at  
…/trunk/vm.c:1498  
#9 0x000000000046c5da in gc\_mark\_children (objspace=0x823dd0,  
ptr=8858240, lev=1) at …/trunk/gc.c:1756  
#10 0x000000000046dbb2 in gc\_marks (objspace=0x823dd0) at  
…/trunk/gc.c:1546  
#11 0x000000000046ec00 in gc\_lazy\_sweep (objspace=0x823dd0) at  
…/trunk/gc.c:2069  
#12 0x000000000046eff4 in rb\_node\_newnode (type=NODE\_DOT2, a0=259,  
a1=8575640, a2=0) at …/trunk/gc.c:1044  
#13 0x000000000044e7e6 in sort\_by\_i (i=8575640, ary=8593680, argc=, argv=) at …/trunk/enum.c:775  
#14 0x000000000056d405 in vm\_yield\_with\_cfunc (th=0x823a50,  
block=0x2accb9c56dd0, self=8833160, argc=1, argv=0x8, blockargptr=0x0)  
at …/trunk/vm\_insnhelper.c:724  
#15 0x0000000000579b29 in rb\_yield (val=8575640) at …/trunk/vm.c:587  
#16 0x000000000041f705 in rb\_ary\_each (ary=8833160) at  
…/trunk/array.c:1427  
#17 0x000000000056e44b in vm\_call0 (th=0x823a50, recv=8833160, id=, argc=0, argv=0x8, me=0x8da190) at …/trunk/vm\_eval.c:78  
#18 0x0000000000569433 in rb\_iterate (it\_proc=0x56f620 \<iterate\_method\>,  
data1=140737488339280, bl\_proc=0x44e7a0 \<sort\_by\_i\>, data2=) at …/trunk/vm\_eval.c:852  
#19 0x00000000005695d9 in rb\_block\_call (obj=,  
mid=, argc=, argv=, bl\_proc=0xffffffff, data2=47058777344432) at  
…/trunk/vm\_eval.c:932  
#20 0x000000000044d62c in enum\_sort\_by (obj=8833160) at  
…/trunk/enum.c:879  
#21 0x0000000000571837 in vm\_call\_method (th=0x823a50,  
cfp=0x2accb9c56e00, num=0, blockptr=0x2accb9c56e29, flag=0, id=1480,  
me=0x899460, recv=8833160) at …/trunk/vm\_insnhelper.c:401  
#22 0x0000000000572dd9 in vm\_exec\_core (th=0x823a50, initial=) at …/trunk/insns.def:1006  
#23 0x0000000000578088 in vm\_exec (th=0x823a50) at …/trunk/vm.c:1145  
#24 0x000000000057a0d2 in loop\_i () at …/trunk/vm.c:557  
#25 0x000000000045764b in rb\_rescue2 (b\_proc=0x579e50 \<loop\_i\>, data1=0,  
r\_proc=0, data2=0) at …/trunk/eval.c:646  
#26 0x0000000000569609 in rb\_f\_loop (self=8932400) at  
…/trunk/vm\_eval.c:816  
#27 0x0000000000571837 in vm\_call\_method (th=0x823a50,  
cfp=0x2accb9c56f08, num=0, blockptr=0x2accb9c56f31, flag=8, id=2864,  
me=0x8ad470, recv=8932400) at …/trunk/vm\_insnhelper.c:401  
#28 0x0000000000572dd9 in vm\_exec\_core (th=0x823a50, initial=) at …/trunk/insns.def:1006  
#29 0x0000000000578088 in vm\_exec (th=0x823a50) at …/trunk/vm.c:1145  
#30 0x0000000000578408 in rb\_iseq\_eval\_main (iseqval=8835000) at  
…/trunk/vm.c:1386  
#31 0x00000000004579c3 in ruby\_exec\_internal (n=0x86cfb8) at  
…/trunk/eval.c:214  
#32 0x00000000004596e6 in ruby\_run\_node (n=) at  
…/trunk/eval.c:261  
#33 0x000000000041a3bd in main (argc=6, argv=0x7fffffffcfd8) at  
…/trunk/main.c:35

---

<div class="post-metadata">

**Author:** ![SASADA\_Koichi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f1d935/32.png) [@SASADA\_Koichi](https://www.ruby-forum.com/u/SASADA_Koichi)\
**Post date:** [July 25, 2010, 4:08pm UTC](https://www.ruby-forum.com/t/bug-trunk-rb-gc-mark-unknown-data-type/192157/2 "2010-07-25T16:08:51Z")

</div>

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

At Sun, 25 Jul 2010 12:17:40 +0900,  
SASADA Koichi wrote in [ruby-dev:41874]:

> e$B!!\>$7$/DI$C$F$$$J$$$N$G$9$,!"e(B[BUG] e$B$,=P$^$7$?!#:G=i$Oe(B mswin32 e$B$G=P2q$Ce(B  
> e$B$F!"e(Bruby 1.9.3dev (2010-07-25 trunk 28751) [x86\_64-linux] e$B$G:F8=$9$k$3$He(B  
> e$B$r3NG’$7$^$7$?!#e(B

e$B$3$l$GMn$A$J$/$J$k$h$&$J5$$,$7$^$9!#e(B

# svn.ruby-lang.orge$B$,Mn$A$F$k$h$&$J$N$G%3%\_%C%H$G$-$^$;$s$,!#e(B

diff --git a/vm.c b/vm.c  
index f8509d7…3010fe8 100644  
— a/vm.c  
+++ b/vm.c  
@@ -1647,7 +1647,7 @@ rb\_thread\_mark(void \*ptr)

```
   while (cfp != limit_cfp) {
 rb_gc_mark(cfp->proc);

```

- if (cfp-\>iseq) rb\_gc\_mark(cfp-\>iseq-\>self);

- if (RUBY\_VM\_NORMAL\_ISEQ\_P(cfp-\>iseq)) rb\_gc\_mark(cfp-\>iseq-\>self);  
if (cfp-\>me) ((rb\_method\_entry\_t \*)cfp-\>me)-\>mark = 1;  
cfp = RUBY\_VM\_PREVIOUS\_CONTROL\_FRAME(cfp);  
}

---

<div class="post-metadata">

**Author:** ![SASADA\_Koichi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f1d935/32.png) [@SASADA\_Koichi](https://www.ruby-forum.com/u/SASADA_Koichi)\
**Post date:** [July 26, 2010, 2:57am UTC](https://www.ruby-forum.com/t/bug-trunk-rb-gc-mark-unknown-data-type/192157/3 "2010-07-26T02:57:23Z")

</div>

e$B%A%1%C%He(B #3613 e$B$,99?7$5$l$^$7$?!#e(B (by Nobuyoshi N.)

e$B%9%F!\<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B  
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

This issue was solved with changeset r28752.  
Koichi, thank you for reporting this issue.  
Your contribution to Ruby is greatly appreciated.  
May Ruby be with you.

* * *

[http://redmine.ruby-lang.org/issues/show/3613](http://redmine.ruby-lang.org/issues/show/3613)

---

<div class="post-metadata">

**Author:** ![SASADA\_Koichi](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f1d935/32.png) [@SASADA\_Koichi](https://www.ruby-forum.com/u/SASADA_Koichi)\
**Post date:** [July 26, 2010, 3:12am UTC](https://www.ruby-forum.com/t/bug-trunk-rb-gc-mark-unknown-data-type/192157/4 "2010-07-26T03:12:36Z")

</div>

e$B!!$5$5$@$G$9!#e(B

(2010/07/25 23:08), Nobuyoshi N. wrote::

> - if (cfp-\>iseq) rb\_gc\_mark(cfp-\>iseq-\>self);
> 
> - if (RUBY\_VM\_NORMAL\_ISEQ\_P(cfp-\>iseq)) rb\_gc\_mark(cfp-\>iseq-\>self);

e$B!!$J$\<!"$3$l$^$GL5;v$@$C$?$N$+!"IT;W5D$G$9$M!#e(B

e$B!!$=$l$O$H$b$+$/!“e(Bnormal e$B$8$c$J$$e(B iseq  
e$B$N\>l9g!”$=$l\<+BN$re(B mark e$B$7$J$$$He(B  
e$B$$$1$J$$5$$,$7$^$9!#e(B
