diff options
author | John Högberg <[email protected]> | 2019-05-03 09:54:15 +0200 |
---|---|---|
committer | John Högberg <[email protected]> | 2019-05-03 09:54:15 +0200 |
commit | 2571cbf025e164989e15502da57de4d5e339f07d (patch) | |
tree | 56aaa1978cffdf45d7f647e54edd484af9f7de20 | |
parent | 87e748eda909272ab4c2178fdfe83bb74eef898b (diff) | |
download | otp-2571cbf025e164989e15502da57de4d5e339f07d.tar.gz otp-2571cbf025e164989e15502da57de4d5e339f07d.tar.bz2 otp-2571cbf025e164989e15502da57de4d5e339f07d.zip |
erts: Assert that GC should not be disabled twice
-rw-r--r-- | erts/emulator/beam/erl_process.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 1f6adb98ef..e69a9b8813 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -11019,8 +11019,13 @@ erts_set_gc_state(Process *c_p, int enable) ERTS_LC_ASSERT(ERTS_PROC_LOCK_MAIN == erts_proc_lc_my_proc_locks(c_p)); if (!enable) { - c_p->flags |= F_DISABLE_GC; - return 0; + /* Strictly speaking it's not illegal to disable the GC when it's + * already disabled, but we risk enabling the GC prematurely if (for + * example) a BIF were to blindly disable it when trapping and then + * re-enable it before returning its result. */ + ASSERT(!(c_p->flags & F_DISABLE_GC)); + c_p->flags |= F_DISABLE_GC; + return 0; } c_p->flags &= ~F_DISABLE_GC; |