* 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:
parent
e02f7f79c2
commit
e59b9d35fc
@ -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>
|
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,
|
* iseq.c (set_relation): do not use top_wrapper as bottom of cref,
|
||||||
|
@ -443,3 +443,12 @@ assert_equal 'ok', %q{
|
|||||||
'ok'
|
'ok'
|
||||||
end
|
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
|
||||||
|
}
|
||||||
|
@ -1199,10 +1199,17 @@ onceinlinecache
|
|||||||
()
|
()
|
||||||
(VALUE val)
|
(VALUE val)
|
||||||
{
|
{
|
||||||
|
retry:
|
||||||
if (ic->ic_vmstat) {
|
if (ic->ic_vmstat) {
|
||||||
val = ic->ic_value.value;
|
val = ic->ic_value.value;
|
||||||
JUMP(dst);
|
JUMP(dst);
|
||||||
}
|
}
|
||||||
|
else if (ic->ic_value.value == Qundef)
|
||||||
|
{
|
||||||
|
RUBY_VM_CHECK_INTS();
|
||||||
|
rb_thread_schedule();
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
/* none */
|
/* none */
|
||||||
ic->ic_value.value = Qundef;
|
ic->ic_value.value = Qundef;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user