diff options
author | Lukas Larsson <[email protected]> | 2016-07-14 16:19:26 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2016-07-14 16:19:26 +0200 |
commit | 2a74dd3344db6b6d1ae897dae221401df358eba1 (patch) | |
tree | a78cd6f373039ffad4ece5c05149823636e71a34 /erts/emulator/beam/erl_gc.c | |
parent | eeebefc37ae342f3d7cbbd329b6d75d3963e4811 (diff) | |
parent | 0737ad60e3ab97aa481d63c17eebafe1f2bddd55 (diff) | |
download | otp-2a74dd3344db6b6d1ae897dae221401df358eba1.tar.gz otp-2a74dd3344db6b6d1ae897dae221401df358eba1.tar.bz2 otp-2a74dd3344db6b6d1ae897dae221401df358eba1.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/emulator/beam/erl_gc.c')
-rw-r--r-- | erts/emulator/beam/erl_gc.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c index d0d74bbf44..a224383493 100644 --- a/erts/emulator/beam/erl_gc.c +++ b/erts/emulator/beam/erl_gc.c @@ -672,6 +672,7 @@ do_major_collection: killed before a GC could be done. */ if (reds == -2) { ErtsProcLocks locks = ERTS_PROC_LOCKS_ALL; + int res; erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR); erts_send_exit_signal(p, p->common.id, p, &locks, @@ -683,7 +684,9 @@ do_major_collection: erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC); /* We have to make sure that we have space for need on the heap */ - return delay_garbage_collection(p, live_hf_end, need, fcalls); + res = delay_garbage_collection(p, live_hf_end, need, fcalls); + ERTS_MSACC_POP_STATE_M(); + return res; } erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC); |