aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_nif.c
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2016-06-01 16:22:09 +0200
committerSverker Eriksson <[email protected]>2016-06-01 19:41:29 +0200
commit58d52b1d2d3e9f14bda5b9248d9b25ae12535548 (patch)
treec8732c330d4a9045bdb34ed8884fa2d01cc21584 /erts/emulator/beam/erl_nif.c
parentf4bdac18cb9dd45185e911308a5ebd95ff10d7fd (diff)
downloadotp-58d52b1d2d3e9f14bda5b9248d9b25ae12535548.tar.gz
otp-58d52b1d2d3e9f14bda5b9248d9b25ae12535548.tar.bz2
otp-58d52b1d2d3e9f14bda5b9248d9b25ae12535548.zip
erts: Avoid literals in process independent ErlNifEnv
that would go undetected and cause havoc if module is purged.
Diffstat (limited to 'erts/emulator/beam/erl_nif.c')
-rw-r--r--erts/emulator/beam/erl_nif.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index f1c35cd5a5..4fd82bad10 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -803,19 +803,13 @@ ERL_NIF_TERM enif_make_copy(ErlNifEnv* dst_env, ERL_NIF_TERM src_term)
{
Uint sz;
Eterm* hp;
-#ifdef SHCOPY
- erts_shcopy_t info;
- INITIALIZE_SHCOPY(info);
- sz = copy_shared_calculate(src_term, &info);
- hp = alloc_heap(dst_env, sz);
- src_term = copy_shared_perform(src_term, sz, &info, &hp, &MSO(dst_env->proc));
- DESTROY_SHCOPY(info);
- return src_term;
-#else
+ /*
+ * No preserved sharing allowed as long as literals are also preserved.
+ * Process independent environment can not be reached by purge.
+ */
sz = size_object(src_term);
hp = alloc_heap(dst_env, sz);
return copy_struct(src_term, sz, &hp, &MSO(dst_env->proc));
-#endif
}