diff --git a/ChangeLog b/ChangeLog index 99de2cbd46..d6f0e51b42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Oct 17 10:40:17 2010 Nobuyoshi Nakada + + * class.c (rb_define_{class,module}_id_under): register to be + marked, which probably are defined and used internally. + Sat Oct 16 11:10:55 2010 Masaki Suketa * ext/win32ole/win32ole.c (ole_encoding2cp): set codepage 20936 diff --git a/class.c b/class.c index 4610f4dfa7..31b407038e 100644 --- a/class.c +++ b/class.c @@ -524,6 +524,7 @@ rb_define_class_id_under(VALUE outer, ID id, VALUE super) rb_set_class_path_string(klass, outer, rb_id2str(id)); rb_const_set(outer, id, klass); rb_class_inherited(super, klass); + rb_gc_register_mark_object(klass); return klass; } @@ -590,6 +591,7 @@ rb_define_module_id_under(VALUE outer, ID id) module = rb_define_module_id(id); rb_const_set(outer, id, module); rb_set_class_path_string(module, outer, rb_id2str(id)); + rb_gc_register_mark_object(module); return module; } diff --git a/test/ruby/test_class.rb b/test/ruby/test_class.rb index c81f0752d4..3f18294e0f 100644 --- a/test/ruby/test_class.rb +++ b/test/ruby/test_class.rb @@ -236,4 +236,8 @@ class TestClass < Test::Unit::TestCase copy.send(:include, mod) assert_equal("mod#foo", copy.new.foo) end + + def test_nested_class_removal + assert_normal_exit('File.__send__(:remove_const, :Stat); at_exit{File.stat(".")}; GC.start') + end end diff --git a/version.h b/version.h index b579dcf7c6..a124ed8c9d 100644 --- a/version.h +++ b/version.h @@ -1,11 +1,11 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_RELEASE_DATE "2010-10-16" +#define RUBY_RELEASE_DATE "2010-10-17" #define RUBY_PATCHLEVEL -1 #define RUBY_BRANCH_NAME "trunk" #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 10 -#define RUBY_RELEASE_DAY 16 +#define RUBY_RELEASE_DAY 17 #include "ruby/version.h"