summaryrefslogtreecommitdiff
path: root/marshal.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-07 07:42:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-07 07:42:30 +0000
commit90ce6d2323981caab47b86bdf6f4656cf046c73b (patch)
treeb960d2b7c7fc0e397dc53e506030ed9f06f97da9 /marshal.c
parentd167cfd196c410cbab11e1c3b8cce14297e4a085 (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
Diffstat (limited to 'marshal.c')
-rw-r--r--marshal.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/marshal.c b/marshal.c
index 8424639287..58128ef0d5 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;
}
/*