# \[Bug:trunk\] race condition of /#{ foo }/o

**URL:** <https://www.ruby-forum.com/t/bug-trunk-race-condition-of-foo-o/179415>\
**Category:** Development\
**Created:** [November 24, 2009, 3:37pm UTC](https://www.ruby-forum.com/t/bug-trunk-race-condition-of-foo-o/179415 "2009-11-24T15:37:39Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [November 24, 2009, 3:37pm UTC](https://www.ruby-forum.com/t/bug-trunk-race-condition-of-foo-o/179415/1 "2009-11-24T15:37:39Z")

</div>

e$B1sF#$G$9!#e(B

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

$ cat race.rb  
f = proc {|s| /#{ sleep 1; s }/o }  
[ Thread.new { f.call(“foo”); nil },  
Thread.new { sleep 0.5; f.call(“bar”); nil },  
].each {|t| t.join }  
GC.start  
p f.call

$ ./ruby race.rb  
race.rb:6: [BUG] Segmentation fault  
ruby 1.9.2dev (2009-11-24 trunk 25908) [i686-linux]

## – control frame ---------- c:0004 p:---- s:0011 b:0011 l:000010 d:000010 CFUNC 😛 c:0003 p:0083 s:0007 b:0007 l:001d8c d:0022e8 EVAL race.rb:6 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH c:0001 p:0000 s:0002 b:0002 l:001d8c d:001d8c TOP

race.rb:6:in `<main>' race.rb:6:in`p’

e$B%;%0%a%s%F!\<%7%g%s0cH?$G$9e(B

onceinlinecache e$B$rDL$C$F$+$ie(B setinlinecache e$B$KCe$/A0$^$G$N4Ve(B  
(= /#{ sleep 1; s }/o e$B$NI\>2A$,;O$^$C$F$+$i=\*$o$k$^$G$N4Ve(B) e$B$Ke(B  
e$BJ#?t$N%9%l%C%I$,FMF~$9$k$H!"%$%s%i%$%s%-%c%C%7%e$N%"%/%;%9$,e(B  
race condition e$B$K$J$C$F$$$FE,@Z$K%^!\<%/$5$l$J$/$J$k$h$&$G$9!#e(B

e$B2r7hJ}K!$H$7$F$O!“Ev3:HO0O$,%/%j%F%#%+%k%;%/%7%g%s$K$J$k$h$&e(B  
e$BF14|$r9T$&$+!”$^$?$O2?$+$r$9$kI,MW$,$"$k$H;W$$$^$9!#e(B

once e$B%U%i%0$N$"$k@55,I=8=$rJ#?t%9%l%C%I$GF1;~$KI\>2A$7$?\>l9g$Ne(B  
e$B0UL#$O$I$&$J$k$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [April 27, 2010, 3:55pm UTC](https://www.ruby-forum.com/t/bug-trunk-race-condition-of-foo-o/179415/2 "2010-04-27T15:55:30Z")

</div>

e$B%A%1%C%He(B #2398 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)

e$BC4Ev\<Te(B Nobuyoshi N.e$B$+$ie(BYusuke E.e$B$KJQ99e(B  
Target version 1.9.2e$B$K%;%C%He(B  
ruby -v -e$B$K%;%C%He(B

e$B1sF#$G$9!#e(B

e$B$H$j$“$($:!”:G=i$Ke(B once e$B6h4V$KFMF~$7$?e(B (onceinlinecache  
e$B$r\<B9T$7$?e(B)  
e$B%9%l%C%I$,e(B once e$B6h4V$rC&=P$9$ke(B (setinlinecache  
e$B$r\<B9T$9$ke(B) e$B$^$G!"e(B  
2 e$BHVL\0J9\_$KF1$86h4V$KFMF~$9$k%9%l%C%I$r%V%m%C%/$9$k%Q%C%A$r=q$-$^e(B  
e$B$7$?!#e(B

e$B:G=i$N%9%l%C%I$,@5\>o$K=P8}$KE~C#$7$J$+$C$?\>l9g!"e(B2  
e$BHVL\0J9\_$KFMF~$7$?e(B  
e$B%9%l%C%I$?$A$O1J5W$K%V%m%C%/$7$F$7$^$$$^$9$,!“e(BSEGV  
e$B$h$j$^$7$G$9$7!“e(B  
Ctrl+C e$B$G;\_$a$k$3$H$b$G$-$k$N$G!”$$$$$+$J$H;W$$$^$9!#e(B  
e$B$=$b$=$b$=$&$$$&\>u67$K$J$k$h$&$J%W%m%0%i%`$KLdBj$,$”$k$H8@$($k$+$be(B  
e$B$7$l$^$;$s!#e(B

e$B$9$0$K%3%\_%C%H$7$F$7$^$$$^$9$,!“H?BP$,$”$C$?$i8@$C$F$/$@$5$$!#e(B

diff --git a/insns.def b/insns.def  
index 9541465…ba6f1d6 100644  
— a/insns.def  
+++ b/insns.def  
@@ -1199,10 +1199,17 @@ onceinlinecache  
()  
(VALUE val)  
{

- retry:  
if (ic-\>ic\_vmstat) {  
val = ic-\>ic\_value.value;  
JUMP(dst);  
}
- else if (ic-\>ic\_value.value == Qundef)
- {
- 

```
 RUBY_VM_CHECK_INTS();

```

- 

```
 rb_thread_schedule();

```

- goto retry;
- }  
else {  
/\* none \*/  
ic-\>ic\_value.value = Qundef;

## – Yusuke E. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

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

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [April 27, 2010, 4:07pm UTC](https://www.ruby-forum.com/t/bug-trunk-race-condition-of-foo-o/179415/3 "2010-04-27T16:07:48Z")

</div>

e$B%A%1%C%He(B #2398 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)

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

This issue was solved with changeset r27515.  
Yusuke, 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/2398](http://redmine.ruby-lang.org/issues/show/2398)
