diff options
author | Sverker Eriksson <[email protected]> | 2013-11-13 18:46:17 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2013-11-21 15:04:37 +0100 |
commit | 1f09936f34f5daee534bbfde4f16e5bbb434b6c4 (patch) | |
tree | 6c1c37e0d3505ddb0a56db763c57ec3a35366083 /erts/emulator/beam/erl_process.c | |
parent | 522a29666088d5d96956d2752ffb1596d778cffd (diff) | |
download | otp-1f09936f34f5daee534bbfde4f16e5bbb434b6c4.tar.gz otp-1f09936f34f5daee534bbfde4f16e5bbb434b6c4.tar.bz2 otp-1f09936f34f5daee534bbfde4f16e5bbb434b6c4.zip |
erts: Yield after trapping term_to_binary if gc has been ordered
or if "too much" offheap binaries has been built
Diffstat (limited to 'erts/emulator/beam/erl_process.c')
-rw-r--r-- | erts/emulator/beam/erl_process.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 13b18e9e0e..b88c871ffc 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -8271,25 +8271,22 @@ save_gc_task(Process *c_p, ErtsProcSysTask *st, int prio) int erts_set_gc_state(Process *c_p, int enable) { - int res; ErtsProcSysTaskQs *dgc_tsk_qs; ASSERT(c_p == erts_get_current_process()); ASSERT((ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS) & erts_smp_atomic32_read_nob(&c_p->state)); ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_MAIN == erts_proc_lc_my_proc_locks(c_p)); - res = !(c_p->flags & F_DISABLE_GC); - if (!enable) { c_p->flags |= F_DISABLE_GC; - return res; + return 0; } c_p->flags &= ~F_DISABLE_GC; dgc_tsk_qs = ERTS_PROC_GET_DELAYED_GC_TASK_QS(c_p); if (!dgc_tsk_qs) - return res; + return 0; /* Move delayed gc tasks into sys tasks queues. */ @@ -8387,7 +8384,7 @@ erts_set_gc_state(Process *c_p, int enable) if (dgc_tsk_qs) proc_sys_task_queues_free(dgc_tsk_qs); - return res; + return 1; } void |