merge revision(s) r45350: [Backport #9645]

* variable.c (rb_const_set): delete existing entry on redefinition
	  [Bug #9645]

	* test/ruby/test_const.rb (test_redefinition): test for leak


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@45373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2014-03-20 12:22:17 +00:00
parent e7ee0b13d6
commit 4b72c61d46
4 changed files with 17 additions and 1 deletions

View file

@ -1,3 +1,9 @@
Thu Mar 20 21:13:18 2014 Eric Wong <e@80x24.org>
* variable.c (rb_const_set): delete existing entry on redefinition
[Bug #9645]
* test/ruby/test_const.rb (test_redefinition): test for leak
Thu Mar 20 20:44:17 2014 Kazuki Tsujimoto <kazuki@callcc.net> Thu Mar 20 20:44:17 2014 Kazuki Tsujimoto <kazuki@callcc.net>
* test/fiddle/test_c_struct_entry.rb, * test/fiddle/test_c_struct_entry.rb,

View file

@ -1,5 +1,6 @@
# -*- coding: us-ascii -*- # -*- coding: us-ascii -*-
require 'test/unit' require 'test/unit'
require_relative 'envutil'
class TestConst < Test::Unit::TestCase class TestConst < Test::Unit::TestCase
TEST1 = 1 TEST1 = 1
@ -54,5 +55,12 @@ class TestConst < Test::Unit::TestCase
#{__FILE__}:#{__LINE__-1}: warning: already initialized constant #{c}::X #{__FILE__}:#{__LINE__-1}: warning: already initialized constant #{c}::X
#{__FILE__}:#{__LINE__-3}: warning: previous definition of X was here #{__FILE__}:#{__LINE__-3}: warning: previous definition of X was here
WARNING WARNING
code = <<-PRE
olderr = $stderr.dup
$stderr.reopen(File::NULL, "wb")
350000.times { FOO = :BAR }
$stderr.reopen(olderr)
PRE
assert_no_memory_leak([], '', code, 'redefined constant')
end end
end end

View file

@ -2183,6 +2183,8 @@ rb_const_set(VALUE klass, ID id, VALUE val)
rb_compile_warn(RSTRING_PTR(ce->file), ce->line, rb_compile_warn(RSTRING_PTR(ce->file), ce->line,
"previous definition of %"PRIsVALUE" was here", name); "previous definition of %"PRIsVALUE" was here", name);
} }
st_delete(RCLASS_CONST_TBL(klass), &id, 0);
xfree(ce);
} }
} }
} }

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0" #define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2014-03-20" #define RUBY_RELEASE_DATE "2014-03-20"
#define RUBY_PATCHLEVEL 460 #define RUBY_PATCHLEVEL 461
#define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 3 #define RUBY_RELEASE_MONTH 3