瀏覽代碼

Fix issues with garbage collection.

* Refs became atoms to make sure they can live across calls
  to the NIF functions.
* Initialized curr in decode so that I'm no longer pushing
  random values into the Erlang VM.
pull/8/merge
Paul J. Davis 14 年之前
父節點
當前提交
c0df4509ba
共有 3 個檔案被更改,包括 5 行新增4 行删除
  1. +1
    -1
      c_src/decoder.c
  2. +1
    -1
      c_src/encoder.c
  3. +3
    -2
      c_src/jiffy.c

+ 1
- 1
c_src/decoder.c 查看文件

@ -633,7 +633,7 @@ decode(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ErlNifBinary bin;
ERL_NIF_TERM objs = enif_make_list(env, 0);
ERL_NIF_TERM curr;
ERL_NIF_TERM curr = enif_make_list(env, 0);
ERL_NIF_TERM val;
ERL_NIF_TERM ret;

+ 1
- 1
c_src/encoder.c 查看文件

@ -364,7 +364,7 @@ encode(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
return enif_make_badarg(env);
}
stack = enif_make_list1(env, argv[0]);
stack = enif_make_list(env, 1, argv[0]);
while(!enif_is_empty_list(env, stack)) {
if(!enif_get_list_cell(env, stack, &curr, &stack)) {

+ 3
- 2
c_src/jiffy.c 查看文件

@ -15,8 +15,9 @@ load(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
st->atom_false = make_atom(env, "false");
st->atom_bignum = make_atom(env, "bignum");
st->ref_object = enif_make_ref(env);
st->ref_array = enif_make_ref(env);
// Markers used in encoding
st->ref_object = make_atom(env, "$object_ref$");
st->ref_array = make_atom(env, "$array_ref$");
*priv = (void*) st;

Loading…
取消
儲存