1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

string.c: clear env self in symbol proc

* 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/trunk@45576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-04-12 13:11:11 +00:00
parent be711df831
commit 2f3b28c682
4 changed files with 19 additions and 0 deletions

View file

@ -1,3 +1,9 @@
Sat Apr 12 22:11:10 2014 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]
Sat Apr 12 09:26:48 2014 Eric Hodel <drbrain@segment7.net>
* ext/openssl/ossl_ocsp.c: [DOC] Document OpenSSL::OCSP.

View file

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

11
proc.c
View file

@ -709,6 +709,17 @@ rb_block_lambda(void)
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
rb_f_lambda(void)
{

View file

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