diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2014-06-11 13:20:44 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2014-06-11 13:20:44 -0700 |
commit | adad6731147283f692e1d8a7c782cb0aab163a9e (patch) | |
tree | 2204440f1674c661d1e3a71a65c5d6b26a6fda03 /ext/ffi_yajl | |
parent | 2a46101c848e2a75afc72b1440f9d1ee3036c112 (diff) | |
download | ffi-yajl-adad6731147283f692e1d8a7c782cb0aab163a9e.tar.gz |
setup ivars before allocating array
Diffstat (limited to 'ext/ffi_yajl')
-rw-r--r-- | ext/ffi_yajl/ext/parser/parser.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/ext/ffi_yajl/ext/parser/parser.c b/ext/ffi_yajl/ext/parser/parser.c index 8f9ccc0..faaaf8d 100644 --- a/ext/ffi_yajl/ext/parser/parser.c +++ b/ext/ffi_yajl/ext/parser/parser.c @@ -164,15 +164,15 @@ static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE opts) { unsigned char *err; CTX ctx; - ctx.stack = rb_ary_new(); - ctx.key_stack = rb_ary_new(); - /* hack to avoid garbage collection */ rb_ivar_set(self, rb_intern("stack"), ctx.stack); rb_ivar_set(self, rb_intern("key_stack"), ctx.key_stack); rb_ivar_set(self, rb_intern("finished"), ctx.stack); rb_ivar_set(self, rb_intern("key"), ctx.stack); + ctx.stack = rb_ary_new(); + ctx.key_stack = rb_ary_new(); + hand = yajl_alloc(&callbacks, NULL, &ctx); if ((stat = yajl_parse(hand, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str))) != yajl_status_ok) { err = yajl_get_error(hand, 1, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str)); |