diff options
author | Rickard Green <[email protected]> | 2016-09-02 15:10:24 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2016-09-02 15:10:24 +0200 |
commit | 26be791d0832060de91e4d7afdf33fad379dd718 (patch) | |
tree | 7c52a6e1d8f91b26df7e3d496fecfb91da3b9c8b /erts/emulator | |
parent | c2f8b61ca3682281752fa0984699214dfcbf7ccd (diff) | |
parent | 197ed04e8e2230fb011dc95e25089cad5141d460 (diff) | |
download | otp-26be791d0832060de91e4d7afdf33fad379dd718.tar.gz otp-26be791d0832060de91e4d7afdf33fad379dd718.tar.bz2 otp-26be791d0832060de91e4d7afdf33fad379dd718.zip |
Merge branch 'maint'
* maint:
Introduce literal sweep of native stack in new purge strategy
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/beam_bif_load.c | 5 | ||||
-rw-r--r-- | erts/emulator/test/hipe_SUITE.erl | 3 |
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 115005e857..c7e13f276d 100644 --- a/erts/emulator/beam/beam_bif_load.c +++ b/erts/emulator/beam/beam_bif_load.c @@ -944,8 +944,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), |