From f1f61dc8533b4f9ec0cf902c6476d4d03c54c301 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 7 Oct 2009 07:42:30 +0000 Subject: * marshal.c (mark_dump_arg, mark_load_arg): ignore already cleaned data. [ruby-core:25969] * marshal.c (clear_dump_arg, clear_load_arg): clear freed fields. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- marshal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'marshal.c') diff --git a/marshal.c b/marshal.c index 842463928..58128ef0d 100644 --- a/marshal.c +++ b/marshal.c @@ -162,7 +162,7 @@ static void mark_dump_arg(void *ptr) { struct dump_arg *p = ptr; - if (!ptr) + if (!p->symbols) return; rb_mark_set(p->data); rb_mark_hash(p->compat_tbl); @@ -850,7 +850,9 @@ clear_dump_arg(struct dump_arg *arg) st_free_table(arg->symbols); arg->symbols = 0; st_free_table(arg->data); + arg->data = 0; st_free_table(arg->compat_tbl); + arg->compat_tbl = 0; if (arg->encodings) { st_free_table(arg->encodings); arg->encodings = 0; @@ -974,7 +976,7 @@ static void mark_load_arg(void *ptr) { struct load_arg *p = ptr; - if (!ptr) + if (!p->symbols) return; rb_mark_tbl(p->data); rb_mark_hash(p->compat_tbl); @@ -1714,7 +1716,9 @@ clear_load_arg(struct load_arg *arg) st_free_table(arg->symbols); arg->symbols = 0; st_free_table(arg->data); + arg->data = 0; st_free_table(arg->compat_tbl); + arg->compat_tbl = 0; } /* -- cgit