diff options
-rw-r--r-- | erts/emulator/beam/erl_process.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 406336fea7..411734038a 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -9924,6 +9924,17 @@ Process *erts_schedule(ErtsSchedulerData *esdp, Process *p, int calls) if (((state & (ERTS_PSFLG_SUSPENDED | ERTS_PSFLG_ACTIVE)) != ERTS_PSFLG_ACTIVE) & !(state & ERTS_PSFLG_EXITING)) { + + /* Tracing, handling signals and running sys_tasks may + have created data on the process heap that should + be GC:ed. */ + if (ERTS_IS_GC_DESIRED(p) + && !(p->flags & (F_DELAY_GC|F_DISABLE_GC))) { + int cost = scheduler_gc_proc(p, reds); + calls += cost; + reds -= cost; + } + goto sched_out_proc; } |