diff options
author | Rickard Green <[email protected]> | 2015-11-19 17:07:06 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2015-12-08 14:47:46 +0100 |
commit | a5dd6499d53ed596e2f8aa17ee35ff87cd32fe60 (patch) | |
tree | 26d671ac23cc2934706981318b0f7d6fee5affd4 /erts/emulator/hipe | |
parent | cc3cc025f43a00281d2f836e12c2e1627cd50145 (diff) | |
download | otp-a5dd6499d53ed596e2f8aa17ee35ff87cd32fe60.tar.gz otp-a5dd6499d53ed596e2f8aa17ee35ff87cd32fe60.tar.bz2 otp-a5dd6499d53ed596e2f8aa17ee35ff87cd32fe60.zip |
Distinguish between GC disabled by BIFs and other disabled GC
Processes remember heap fragments that are known to be fully
live due to creation in a just called BIF that yields in the
live_hf_end field. This field must not be used if we have not
disabled GC in a BIF. F_DELAY_GC has been introduced in order
to distinguish between to two different scenarios.
- F_DISABLE_GC should *only* be used by BIFs. This when
the BIF needs to yield while preventig a GC.
- F_DELAY_GC should only be used when GC is temporarily
disabled while the process is scheduled. A process must
not be scheduled out while F_DELAY_GC is set.
Diffstat (limited to 'erts/emulator/hipe')
-rw-r--r-- | erts/emulator/hipe/hipe_native_bif.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/erts/emulator/hipe/hipe_native_bif.c b/erts/emulator/hipe/hipe_native_bif.c index ad8fb685e5..1bfee94e9e 100644 --- a/erts/emulator/hipe/hipe_native_bif.c +++ b/erts/emulator/hipe/hipe_native_bif.c @@ -164,7 +164,7 @@ void hipe_select_msg(Process *p) JOIN_MESSAGE(p); CANCEL_TIMER(p); /* calls erts_cancel_proc_timer() */ erts_save_message_in_proc(p, msgp); - p->flags &= ~F_DISABLE_GC; + p->flags &= ~F_DELAY_GC; if (ERTS_IS_GC_DESIRED(p)) { /* * We want to GC soon but we leave a few @@ -519,7 +519,7 @@ Eterm hipe_check_get_msg(Process *c_p) { ErtsMessage *msgp; - c_p->flags |= F_DISABLE_GC; + c_p->flags |= F_DELAY_GC; next_message: @@ -541,7 +541,7 @@ Eterm hipe_check_get_msg(Process *c_p) /* XXX: BEAM doesn't need this */ c_p->hipe_smp.have_receive_locks = 1; #endif - c_p->flags &= ~F_DISABLE_GC; + c_p->flags &= ~F_DELAY_GC; return THE_NON_VALUE; #ifdef ERTS_SMP } |