diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-26 19:40:49 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-26 19:40:49 +0000 |
commit | b416cc6f3f843fd17cef94bdb10eb6af63fd5b18 (patch) | |
tree | f719a4464d14c893f0e22317f3a08df7476e1cb7 /marshal.c | |
parent | 71341b814a863ffd95f9fc640c1d62ae83b668f8 (diff) |
* gc.c (rb_mark_set): new function to mark keys.
* marshal.c (struct dump_arg, struct load_arg): added wrappers to mark
data and compat_tbl entries. [ruby-dev:31870]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r-- | marshal.c | 20 |
1 files changed, 13 insertions, 7 deletions
@@ -89,8 +89,6 @@ typedef struct { VALUE (*loader)(VALUE, VALUE); } marshal_compat_t; -#define make_compat_tbl_wrapper(tbl) Data_Wrap_Struct(rb_cData, rb_mark_tbl, 0, tbl) - static st_table *compat_allocator_tbl; static VALUE compat_allocator_tbl_wrapper; @@ -138,7 +136,7 @@ struct dump_arg { st_table *data; int taint; st_table *compat_tbl; - VALUE compat_tbl_wrapper; + VALUE wrapper; }; struct dump_call_arg { @@ -147,6 +145,14 @@ struct dump_call_arg { int limit; }; +static void +mark_dump_arg(void *ptr) +{ + struct dump_arg *p = ptr; + rb_mark_set(p->data); + rb_mark_hash(p->compat_tbl); +} + static VALUE class2path(VALUE klass) { @@ -722,8 +728,8 @@ dump_ensure(struct dump_arg *arg) st_free_table(arg->symbols); st_free_table(arg->data); st_free_table(arg->compat_tbl); - DATA_PTR(arg->compat_tbl_wrapper) = 0; - arg->compat_tbl_wrapper = 0; + DATA_PTR(arg->wrapper) = 0; + arg->wrapper = 0; if (arg->taint) { OBJ_TAINT(arg->str); } @@ -797,7 +803,7 @@ marshal_dump(int argc, VALUE *argv) arg.data = st_init_numtable(); arg.taint = Qfalse; arg.compat_tbl = st_init_numtable(); - arg.compat_tbl_wrapper = make_compat_tbl_wrapper(arg.compat_tbl); + arg.wrapper = Data_Wrap_Struct(rb_cData, mark_dump_arg, 0, &arg); c_arg.obj = obj; c_arg.arg = &arg; c_arg.limit = limit; @@ -1499,7 +1505,7 @@ marshal_load(int argc, VALUE *argv) arg.src = port; arg.offset = 0; arg.compat_tbl = st_init_numtable(); - arg.compat_tbl_wrapper = make_compat_tbl_wrapper(arg.compat_tbl); + arg.compat_tbl_wrapper = Data_Wrap_Struct(rb_cData, rb_mark_tbl, 0, arg.compat_tbl); major = r_byte(&arg); minor = r_byte(&arg); |