aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-30 05:42:06 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-30 05:42:06 +0000
commit375dbe3c7364a0c8cd1ed6d51c5f2cabe8fa001e (patch)
tree6d3087b7c88d380efee5c8b90cee05e896e771d7
parent1b80bfa4692f6dcab6505610bb27d8dc593a132a (diff)
downloadruby-375dbe3c7364a0c8cd1ed6d51c5f2cabe8fa001e.tar.gz
* ext/dl/mkcallback.rb (rb_dl_init_callbacks): avoid GC problem which
is caused by 'GC.stress=true; require "dl"'. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18940 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--ext/dl/mkcallback.rb21
2 files changed, 18 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c247ed9b3..70fb5dc625 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Aug 30 14:39:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/mkcallback.rb (rb_dl_init_callbacks): avoid GC problem which
+ is caused by 'GC.stress=true; require "dl"'.
+
Sat Aug 30 10:46:44 2008 Koichi Sasada <ko1@atdot.net>
* ext/iconv/iconv.c: remove include pragma for "ruby/intern.h".
diff --git a/ext/dl/mkcallback.rb b/ext/dl/mkcallback.rb
index 21fb177f8b..4dbd0d6ef6 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));",