|
34 | 34 | const uint64_t PID_LENGTH = 1024;
|
35 | 35 | const uint64_t BUFFER_SIZE = 4096;
|
36 | 36 |
|
| 37 | +/*************/ |
| 38 | +/* NIF Setup */ |
| 39 | +/*************/ |
| 40 | + |
| 41 | +ErlNifResourceType *Option_type; |
| 42 | + |
| 43 | +// Resource type helpers |
| 44 | +void Option_type_cleanup(ErlNifEnv *env, void *arg) |
| 45 | +{ |
| 46 | + uintptr_t handle = (uintptr_t)arg; |
| 47 | + DeleteHandle(handle); |
| 48 | +} |
| 49 | + |
| 50 | +static int load(ErlNifEnv *env, void **priv_data, ERL_NIF_TERM load_info) |
| 51 | +{ |
| 52 | + ErlNifResourceFlags flags = ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER; |
| 53 | + Option_type = enif_open_resource_type(env, NULL, "Option_type", Option_type_cleanup, flags, NULL); |
| 54 | + return Option_type == NULL ? 1 : 0; |
| 55 | +} |
| 56 | + |
| 57 | +static int upgrade(ErlNifEnv *env, void **priv_data, void **old_priv_data, |
| 58 | + ERL_NIF_TERM load_info) |
| 59 | +{ |
| 60 | + ErlNifResourceFlags flags = ERL_NIF_RT_TAKEOVER; |
| 61 | + Option_type = enif_open_resource_type(env, NULL, "Option_type", Option_type_cleanup, flags, NULL); |
| 62 | + return Option_type == NULL ? 1 : 0; |
| 63 | +} |
| 64 | + |
37 | 65 | /***********/
|
38 | 66 | /* Helpers */
|
39 | 67 | /***********/
|
@@ -219,4 +247,4 @@ static ErlNifFunc nif_funcs[] = {
|
219 | 247 | NIF_ENTRY(stream_close, 1),
|
220 | 248 | };
|
221 | 249 |
|
222 |
| -ERL_NIF_INIT(Elixir.Libp2p, nif_funcs, NULL, NULL, NULL, NULL) |
| 250 | +ERL_NIF_INIT(Elixir.Libp2p, nif_funcs, load, NULL, upgrade, NULL) |
0 commit comments