aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorSverker Eriksson <sverker@erlang.org>2014-02-20 12:02:20 +0100
committerSverker Eriksson <sverker@erlang.org>2014-02-20 12:02:20 +0100
commit3cfcf1026418cbef3c1a35ebe8794eb99530e4ff (patch)
tree9cbc85e64000ecf574c3618b0b14d16f57356e0f /erts
parent22f6c2e3d24d00931aa9ff9a54817f6a7a61fe3d (diff)
parenta1c31504a7a75f74ec90f3aab8aa0e6fbfc20c33 (diff)
downloadotp-3cfcf1026418cbef3c1a35ebe8794eb99530e4ff.tar.gz
otp-3cfcf1026418cbef3c1a35ebe8794eb99530e4ff.tar.bz2
otp-3cfcf1026418cbef3c1a35ebe8794eb99530e4ff.zip
Merge branch 'sverk/nif_SUITE-memleak'
* sverk/nif_SUITE-memleak: erts: Fix memory leak in nif_SUITE:resource_takeover
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_mod.c3
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_mod.h6
2 files changed, 7 insertions, 2 deletions
diff --git a/erts/emulator/test/nif_SUITE_data/nif_mod.c b/erts/emulator/test/nif_SUITE_data/nif_mod.c
index aed8524635..55a0d2ac4f 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_mod.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_mod.c
@@ -191,7 +191,8 @@ static int load(ErlNifEnv* env, void** priv, ERL_NIF_TERM load_info)
add_call(env, data, "load");
do_load_info(env, load_info, &retval);
- data->calls = 0;
+ if (retval)
+ NifModPrivData_release(data);
return retval;
}
diff --git a/erts/emulator/test/nif_SUITE_data/nif_mod.h b/erts/emulator/test/nif_SUITE_data/nif_mod.h
index cd0ecf4b54..fb14fee815 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_mod.h
+++ b/erts/emulator/test/nif_SUITE_data/nif_mod.h
@@ -14,7 +14,6 @@ typedef struct call_info_t
typedef struct
{
ErlNifMutex* mtx;
- int calls;
int ref_cnt;
CallInfo* call_history;
ErlNifResourceType* rt_arr[RT_MAX];
@@ -28,6 +27,11 @@ typedef struct
enif_mutex_unlock((NMPD)->mtx); \
if (is_last) { \
enif_mutex_destroy((NMPD)->mtx); \
+ while ((NMPD)->call_history) { \
+ CallInfo* next = (NMPD)->call_history->next; \
+ enif_free((NMPD)->call_history); \
+ (NMPD)->call_history = next; \
+ } \
enif_free((NMPD)); \
} \
}while (0)