merge revision(s) 45576: [Backport #11572]

* string.c (sym_to_proc), proc.c (rb_block_clear_env_self): clear
	  caller's self which is useless, so that it can get collected.
	  [Fixes GH-592]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@52362 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
usa 2015-10-29 14:56:00 +00:00
parent 24d44aeb02
commit a6b6f9bb59
5 changed files with 20 additions and 1 deletions

View file

@ -1,3 +1,9 @@
Thu Oct 29 23:54:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* string.c (sym_to_proc), proc.c (rb_block_clear_env_self): clear
caller's self which is useless, so that it can get collected.
[Fixes GH-592]
Thu Oct 29 23:30:20 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org> Thu Oct 29 23:30:20 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
* lib/ipaddr.rb, test/test_ipaddr.rb: Reject invalid address contained * lib/ipaddr.rb, test/test_ipaddr.rb: Reject invalid address contained

View file

@ -630,6 +630,7 @@ void rb_gc_mark_symbols(int full_mark);
VALUE rb_proc_location(VALUE self); VALUE rb_proc_location(VALUE self);
st_index_t rb_hash_proc(st_index_t hash, VALUE proc); st_index_t rb_hash_proc(st_index_t hash, VALUE proc);
int rb_block_arity(void); int rb_block_arity(void);
VALUE rb_block_clear_env_self(VALUE proc);
/* process.c */ /* process.c */
#define RB_MAX_GROUPS (65536) #define RB_MAX_GROUPS (65536)

11
proc.c
View file

@ -636,6 +636,17 @@ rb_block_lambda(void)
return proc_new(rb_cProc, TRUE); return proc_new(rb_cProc, TRUE);
} }
VALUE
rb_block_clear_env_self(VALUE proc)
{
rb_proc_t *po;
rb_env_t *env;
GetProcPtr(proc, po);
GetEnvPtr(po->envval, env);
env->env[0] = Qnil;
return proc;
}
VALUE VALUE
rb_f_lambda(void) rb_f_lambda(void)
{ {

View file

@ -8540,6 +8540,7 @@ sym_to_proc(VALUE sym)
} }
else { else {
proc = rb_proc_new(sym_call, (VALUE)id); proc = rb_proc_new(sym_call, (VALUE)id);
rb_block_clear_env_self(proc);
aryp[index] = sym; aryp[index] = sym;
aryp[index + 1] = proc; aryp[index + 1] = proc;
return proc; return proc;

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.1.8" #define RUBY_VERSION "2.1.8"
#define RUBY_RELEASE_DATE "2015-10-29" #define RUBY_RELEASE_DATE "2015-10-29"
#define RUBY_PATCHLEVEL 411 #define RUBY_PATCHLEVEL 412
#define RUBY_RELEASE_YEAR 2015 #define RUBY_RELEASE_YEAR 2015
#define RUBY_RELEASE_MONTH 10 #define RUBY_RELEASE_MONTH 10