From fa825b6fd6ca9518b090edc055d1413b8a44068d Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Wed, 25 Nov 2015 17:58:00 -0500 Subject: [PATCH] Destroy map iterators once we're done with them. Each call to enif_map_iterator_create() must be paired with a call to enif_map_iterator_destroy(). Otherwise, we'll leak memory. Fixes #112 --- c_src/encoder.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/c_src/encoder.c b/c_src/encoder.c index 4a96048..0029086 100644 --- a/c_src/encoder.c +++ b/c_src/encoder.c @@ -559,6 +559,7 @@ enc_map_to_ejson(ErlNifEnv* env, ERL_NIF_TERM map, ERL_NIF_TERM* out) do { if(!enif_map_iterator_get_pair(env, &iter, &key, &val)) { + enif_map_iterator_destroy(env, &iter); fprintf(stderr, "bad get pair\r\n"); return 0; } @@ -566,6 +567,8 @@ enc_map_to_ejson(ErlNifEnv* env, ERL_NIF_TERM map, ERL_NIF_TERM* out) list = enif_make_list_cell(env, tuple, list); } while(enif_map_iterator_next(env, &iter)); + enif_map_iterator_destroy(env, &iter); + *out = enif_make_tuple1(env, list); return 1; }