【问题标题】:Erlang nif does not upgradesErlang nif 不升级
【发布时间】:2016-10-06 18:04:07
【问题描述】:

我用 erlang 写了一个nif 库。我还写了loadupgradeunload 函数。

这是我的代码:

#include "erl_nif.h"


int checksum(char *s)
{
    return 123;
}


/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////


static ERL_NIF_TERM
checksum_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
    return enif_make_int(env, checksum(""));
}


/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////


static int
load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
{
    *priv_data = enif_open_resource_type(env,
                                         NULL,
                                         "cwm_utils_buf",
                                         NULL,
                                         ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER,
                                         NULL);
    return 0;
}


static int
upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_NIF_TERM load_info)
{
    *priv_data = enif_open_resource_type(env,
                                         NULL,
                                         "cwm_utils_buf",
                                         NULL,
                                         ERL_NIF_RT_TAKEOVER,
                                         NULL);
    return 0;
}


static void
unload(ErlNifEnv* env, void* priv_data)
{
    return ;
}


static ErlNifFunc nif_funcs[] = {
    {"checksum", 1, checksum_nif}
};



ERL_NIF_INIT(mynif, nif_funcs, &load, NULL, &upgrade, &unload);

在 erlang shell 中,我加载这个nif 并运行checksum 函数,它返回123,一切都很好!

之后,我将checksum 的返回值更改为123456,并使用l(mynif) 命令编译并将nif 加载到erlang vm。

问题来了!如果我运行checksum函数,返回值必须是123445但它仍然是123nif还没有升级。

有什么问题?我搜索了很多并测试了一些示例和库,例如jiffy,但没有奏效。

【问题讨论】:

    标签: c erlang erlang-nif


    【解决方案1】:

    试试:

    code:purge(mynif).
    code:delete(mynif).
    l(mynif).
    

    【讨论】:

    • 你能更好地解释一下这段代码 sn-p 是如何以及为什么用来解决 OP 的问题的吗?
    猜你喜欢
    • 2015-01-02
    • 2016-01-30
    • 2012-01-07
    • 2016-03-30
    • 1970-01-01
    • 2020-05-17
    • 2011-03-25
    • 2016-09-01
    • 2013-01-03
    相关资源
    最近更新 更多