From 2b49047143d1e10d6dd5d2359dba2d302fa07c66 Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 26 Nov 1999 09:07:26 +0000 Subject: mark_end_proc git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index de3c73e376..c4d2afcea1 100644 --- a/eval.c +++ b/eval.c @@ -5232,10 +5232,20 @@ rb_set_end_proc(func, data) link->next = end_proc_data; link->func = func; link->data = data; - rb_global_variable(&link->data); end_proc_data = link; } +void +rb_mark_end_proc() +{ + struct end_proc_data *link = end_proc_data; + + while (link) { + rb_gc_mark(link->data); + link = link->next; + } +} + static void call_end_proc(data) VALUE data; @@ -5266,17 +5276,15 @@ rb_f_at_exit() void rb_exec_end_proc() { - struct end_proc_data *link = end_proc_data; - struct end_proc_data *tmp; + struct end_proc_data *link; int status; - while (link) { + while (end_proc_data) { + link = end_proc_data; + end_proc_data = link->next; rb_protect((VALUE(*)())link->func, link->data, &status); - tmp = link->next; free(link); - link = tmp; } - end_proc_data = 0; } void -- cgit v1.2.3