aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2016-09-02 15:09:08 +0200
committerRickard Green <[email protected]>2016-09-02 15:09:08 +0200
commit197ed04e8e2230fb011dc95e25089cad5141d460 (patch)
treebcb22dc3c3281b86c905f62e424124bf110b2fb1 /erts
parent076098cebd1885ec5a56575d910322a6f1de67ff (diff)
parent18c52187b1714284416a8a1d618ce4db831d1a45 (diff)
downloadotp-197ed04e8e2230fb011dc95e25089cad5141d460.tar.gz
otp-197ed04e8e2230fb011dc95e25089cad5141d460.tar.bz2
otp-197ed04e8e2230fb011dc95e25089cad5141d460.zip
Merge branch 'rickard/new-purge-strategy/OTP-13777' into maint
* rickard/new-purge-strategy/OTP-13777: Introduce literal sweep of native stack in new purge strategy
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/beam_bif_load.c5
-rw-r--r--erts/emulator/test/hipe_SUITE.erl3
2 files changed, 8 insertions, 0 deletions
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c
index ba79068859..dddcfbb77d 100644
--- a/erts/emulator/beam/beam_bif_load.c
+++ b/erts/emulator/beam/beam_bif_load.c
@@ -976,8 +976,13 @@ erts_proc_copy_literal_area(Process *c_p, int *redsp, int fcalls, int gc_allowed
}
if (any_heap_ref_ptrs(c_p->stop, c_p->hend, literals, lit_bsize))
+ goto literal_gc;
+ *redsp += 1;
+#ifdef HIPE
+ if (nstack_any_heap_ref_ptrs(c_p, literals, lit_bsize))
goto literal_gc;
*redsp += 1;
+#endif
if (any_heap_refs(c_p->heap, c_p->htop, literals, lit_bsize))
goto literal_gc;
*redsp += 1;
diff --git a/erts/emulator/test/hipe_SUITE.erl b/erts/emulator/test/hipe_SUITE.erl
index 3e682b8d88..a556b4ddc0 100644
--- a/erts/emulator/test/hipe_SUITE.erl
+++ b/erts/emulator/test/hipe_SUITE.erl
@@ -51,6 +51,9 @@ t_copy_literals(Config) when is_list(Config) ->
true = erlang:delete_module(literals),
true = erlang:purge_module(literals),
+ %% Give the literal collector some time to work...
+ receive after 2000 -> ok end,
+
%% check that the ex-literals are ok
[a,b,c] = ref_cell:call(PA, get),
{a,b,c} = ref_cell:call(PB, get),