Erlang, передать объект nif между функциями
Я пишу C nif code
и в функции new
создает структуру стека с enif_alloc_resource
и возвращает это. когда я использую функцию enif_make_resources
всегда возвращается <<>>
в эрланге
Вот мой код C:
#include "erl_nif.h"
static ErlNifResourceType *MEM_RESOURCE;
typedef struct
{
int n;
int ps;
int pe;
ERL_NIF_TERM *data;
} Stack;
Stack *new(ErlNifEnv *env, int size)
{
Stack *s = (Stack*) enif_alloc_resource(MEM_RESOURCE, sizeof(Stack));
s->n = size;
s->ps = 0;
s->pe = size - 1;
s->data = enif_alloc(sizeof(ERL_NIF_TERM) * size);
return s;
}
static ERL_NIF_TERM new_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
int size;
if (!enif_get_int(env, argv[0], &size))
return enif_make_badarg(env);
Stack *stack = new(env, size);
ERL_NIF_TERM res = enif_make_resource(env, stack);
enif_release_resource(stack);
return res;
}
static ErlNifFunc nif_funcs[] =
{
{"new", 1, new_nif}
};
static void cleanup(ErlNifEnv *env, void *obj){}
static int load(ErlNifEnv *env, void **priv_data, ERL_NIF_TERM load_info){
MEM_RESOURCE = enif_open_resource_type(env, NULL, "mem_resource", &cleanup, ERL_NIF_RT_CREATE, 0);
if (MEM_RESOURCE == NULL)
return -1;
return 0;
}
ERL_NIF_INIT(q4, nif_funcs, load, NULL, NULL, NULL)
Теперь функция new_nif
всегда возвращается <<>>
но я проверил res
не является NULL
!. В чем проблема?