diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-30 05:42:06 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-30 05:42:06 +0000 |
commit | 796cd8d2b393027449373ab35d32e531806c207c (patch) | |
tree | 6d3087b7c88d380efee5c8b90cee05e896e771d7 /ext/dl | |
parent | e5a3bd3ceb633e0c32422ecff29e2d20f170db7e (diff) | |
download | ruby-796cd8d2b393027449373ab35d32e531806c207c.tar.gz ruby-796cd8d2b393027449373ab35d32e531806c207c.tar.xz ruby-796cd8d2b393027449373ab35d32e531806c207c.zip |
* ext/dl/mkcallback.rb (rb_dl_init_callbacks): avoid GC problem which
is caused by 'GC.stress=true; require "dl"'.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/dl')
-rw-r--r-- | ext/dl/mkcallback.rb | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/ext/dl/mkcallback.rb b/ext/dl/mkcallback.rb index 21fb177f8..4dbd0d6ef 100644 --- a/ext/dl/mkcallback.rb +++ b/ext/dl/mkcallback.rb @@ -135,16 +135,21 @@ $out << (<<EOS) static void rb_dl_init_callbacks() { + VALUE tmp; cb_call = rb_intern("call"); - rb_DLCdeclCallbackProcs = rb_ary_new(); - rb_DLCdeclCallbackAddrs = rb_ary_new(); - rb_DLStdcallCallbackProcs = rb_ary_new(); - rb_DLStdcallCallbackAddrs = rb_ary_new(); - rb_define_const(rb_mDL, "CdeclCallbackProcs", rb_DLCdeclCallbackProcs); - rb_define_const(rb_mDL, "CdeclCallbackAddrs", rb_DLCdeclCallbackAddrs); - rb_define_const(rb_mDL, "StdcallCallbackProcs", rb_DLStdcallCallbackProcs); - rb_define_const(rb_mDL, "StdcallCallbackAddrs", rb_DLStdcallCallbackAddrs); + tmp = rb_DLCdeclCallbackProcs = rb_ary_new(); + rb_define_const(rb_mDL, "CdeclCallbackProcs", tmp); + + tmp = rb_DLCdeclCallbackAddrs = rb_ary_new(); + rb_define_const(rb_mDL, "CdeclCallbackAddrs", tmp); + + tmp = rb_DLStdcallCallbackProcs = rb_ary_new(); + rb_define_const(rb_mDL, "StdcallCallbackProcs", tmp); + + tmp = rb_DLStdcallCallbackAddrs = rb_ary_new(); + rb_define_const(rb_mDL, "StdcallCallbackAddrs", tmp); + #{ (0...MAX_DLTYPE).collect{|ty| sprintf(" rb_ary_push(rb_DLCdeclCallbackProcs, rb_ary_new3(%d,%s));", |