diff options
author | Rickard Green <[email protected]> | 2017-06-02 14:12:23 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2017-06-02 14:12:23 +0200 |
commit | e98b1cac4b31050f4887dfa4f115b4b9ffb82168 (patch) | |
tree | 8ee90db3f653cf71b06cf9c1db0b4d7e830f7e14 /erts/emulator/beam/erl_gc.c | |
parent | 2b41d8f318b7e5ec139d42fd2f01a132699be839 (diff) | |
parent | 39a41b0472f275e71ae9bb6abf3bb8b3c995b8e3 (diff) | |
download | otp-e98b1cac4b31050f4887dfa4f115b4b9ffb82168.tar.gz otp-e98b1cac4b31050f4887dfa4f115b4b9ffb82168.tar.bz2 otp-e98b1cac4b31050f4887dfa4f115b4b9ffb82168.zip |
Merge branch 'rickard/purge-hibernated-19' into HEAD
OTP-14444
* rickard/purge-hibernated-19:
Update testcase to check that purge handle hibernated process correct
Do not GC hibernated process from other processes
Fix check_process_code() on hibernated process
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 6f641a1ea7..adba3c1d62 100644 --- a/erts/emulator/beam/erl_gc.c +++ b/erts/emulator/beam/erl_gc.c @@ -738,7 +738,7 @@ do_major_collection: esdp->gc_info.garbage_cols++; esdp->gc_info.reclaimed += reclaimed_now; - FLAGS(p) &= ~F_FORCE_GC; + FLAGS(p) &= ~(F_FORCE_GC|F_HIBERNATED); p->live_hf_end = ERTS_INVALID_HFRAG_PTR; ERTS_MSACC_POP_STATE_M(); @@ -903,6 +903,8 @@ erts_garbage_collect_hibernate(Process* p) ErtsGcQuickSanityCheck(p); + p->flags |= F_HIBERNATED; + erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC); reds = gc_cost(actual_size, actual_size); @@ -1132,6 +1134,7 @@ erts_garbage_collect_literals(Process* p, Eterm* literals, /* * Restore status. */ + p->flags &= ~F_HIBERNATED; erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC); } |