mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* load.c (load_lock): fix not to delete thread shield twice.
it may break the shield locked by another thread. [Bug #7530] [ruby-core:50645] * test/ruby/test_require.rb: a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4ddf057b9a
commit
bc0577c6c8
3 changed files with 29 additions and 3 deletions
|
@ -1,3 +1,11 @@
|
|||
Wed Jan 9 09:53:23 2013 Masaki Matsushita <glass.saga@gmail.com>
|
||||
|
||||
* load.c (load_lock): fix not to delete thread shield twice.
|
||||
it may break the shield locked by another thread.
|
||||
[Bug #7530] [ruby-core:50645]
|
||||
|
||||
* test/ruby/test_require.rb: a test for above.
|
||||
|
||||
Wed Jan 9 02:13:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* include/ruby/ruby.h (RBasic): to be aligned on a VALUE size
|
||||
|
|
3
load.c
3
load.c
|
@ -668,9 +668,6 @@ load_lock(const char *ftptr)
|
|||
}
|
||||
switch (rb_thread_shield_wait((VALUE)data)) {
|
||||
case Qfalse:
|
||||
data = (st_data_t)ftptr;
|
||||
st_delete(loading_tbl, &data, 0);
|
||||
return 0;
|
||||
case Qnil:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -604,4 +604,25 @@ class TestRequire < Test::Unit::TestCase
|
|||
}
|
||||
}
|
||||
end
|
||||
|
||||
def test_require_with_loaded_features_pop
|
||||
bug7530 = '[ruby-core:50645]'
|
||||
assert_in_out_err([], <<-INPUT, %w(:ok), [], bug7530)
|
||||
THREADS = 2
|
||||
ITERATIONS_PER_THREAD = 1000
|
||||
|
||||
$: << '.'
|
||||
system 'touch __load_path_bench_script__.rb'
|
||||
THREADS.times.map {
|
||||
Thread.new do
|
||||
ITERATIONS_PER_THREAD.times do
|
||||
require '__load_path_bench_script__'
|
||||
$".pop
|
||||
end
|
||||
end
|
||||
}.each(&:join)
|
||||
system 'rm __load_path_bench_script__.rb'
|
||||
p :ok
|
||||
INPUT
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue