1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* insns.def (onceinlinecache): add exclusion control for a region

between onceinlinecache and setinlinecache.  [ruby-dev:39768]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
mame 2010-04-27 14:06:16 +00:00
parent e02f7f79c2
commit e59b9d35fc
3 changed files with 21 additions and 0 deletions

View file

@ -1,3 +1,8 @@
Tue Apr 27 22:55:29 2010 Yusuke Endoh <mame@tsg.ne.jp>
* insns.def (onceinlinecache): add exclusion control for a region
between onceinlinecache and setinlinecache. [ruby-dev:39768]
Tue Apr 27 22:40:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
* iseq.c (set_relation): do not use top_wrapper as bottom of cref,

View file

@ -443,3 +443,12 @@ assert_equal 'ok', %q{
'ok'
end
}
assert_equal 'foo', %q{
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
f.call.source
}

View file

@ -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;