2016-06-07 5 views
0

Ich schreibe eine nif Bibliothek in Erlang. Auch schreibe ich load, upgrade und unload Funktionen.Erlang nif nicht Upgrades

Dies ist mein Code:

#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); 

In erlang Shell ich diese nif laden und checksum Funktion laufen und es gibt 123 und alles ist in Ordnung!

Danach habe ich Änderung Rückgabewert von checksum zu 123456 und kompilieren und die nif zu erlang vm laden l(mynif) Befehl.

Hier ist das Problem! Wenn ich checksum Funktion ausführen, muss der Rückgabewert 123445 sein, aber es ist immer noch 123 und nif wurden nicht aktualisiert.

Was ist das Problem? Ich suche viel und teste einige Beispiele und Bibliotheken wie jiffy, aber hat nicht funktioniert.

Antwort

1

Versuchen:

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

Können Sie besser erklären, wie und warum dieser Code-Schnipsel verwendet würde OP das Problem zu beheben? – NoseKnowsAll