aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_process.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2015-11-19 17:07:06 +0100
committerRickard Green <[email protected]>2015-12-08 14:47:46 +0100
commita5dd6499d53ed596e2f8aa17ee35ff87cd32fe60 (patch)
tree26d671ac23cc2934706981318b0f7d6fee5affd4 /erts/emulator/beam/erl_process.c
parentcc3cc025f43a00281d2f836e12c2e1627cd50145 (diff)
downloadotp-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/beam/erl_process.c')
-rw-r--r--erts/emulator/beam/erl_process.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index ebe9361b8d..d17355207b 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -9262,6 +9262,8 @@ Process *schedule(Process *p, int calls)
} else {
sched_out_proc:
+ ASSERT(!(p->flags & F_DELAY_GC));
+
#ifdef ERTS_SMP
ERTS_SMP_CHK_HAVE_ONLY_MAIN_PROC_LOCK(p);
esdp = p->scheduler_data;