diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-07 07:42:30 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-07 07:42:30 +0000 |
commit | 90ce6d2323981caab47b86bdf6f4656cf046c73b (patch) | |
tree | b960d2b7c7fc0e397dc53e506030ed9f06f97da9 | |
parent | d167cfd196c410cbab11e1c3b8cce14297e4a085 (diff) |
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@25256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | marshal.c | 8 |
2 files changed, 13 insertions, 2 deletions
@@ -1,3 +1,10 @@ +Wed Oct 7 16:42:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * 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. + Wed Oct 7 16:06:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * include/ruby/ruby.h (rb_long2int): evalates the argument only @@ -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; } /* |