summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/erl_trace.c')
-rw-r--r--erts/emulator/beam/erl_trace.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c
index 07aa6d7e21..d779faf7db 100644
--- a/erts/emulator/beam/erl_trace.c
+++ b/erts/emulator/beam/erl_trace.c
@@ -1363,6 +1363,7 @@ trace_gc(Process *p, Eterm what, Uint size, Eterm msg)
Eterm* hp;
Uint sz = 0;
Eterm tup;
+ ErtsThrPrgrDelayHandle dhndl = erts_thr_progress_unmanaged_delay();
if (is_tracer_enabled(p, ERTS_PROC_LOCK_MAIN, &p->common, &tnif,
TRACE_FUN_E_GC, what)) {
@@ -1382,6 +1383,7 @@ trace_gc(Process *p, Eterm what, Uint size, Eterm msg)
if (o_hp)
erts_free(ERTS_ALC_T_TMP, o_hp);
}
+ erts_thr_progress_unmanaged_continue(dhndl);
}
void
@@ -2632,6 +2634,7 @@ lookup_tracer_nif(const ErtsTracer tracer)
ErtsTracerNif tnif_tmpl;
ErtsTracerNif *tnif;
tnif_tmpl.module = ERTS_TRACER_MODULE(tracer);
+ ERTS_LC_ASSERT(erts_thr_progress_lc_is_delaying() || erts_get_scheduler_id() > 0);
erts_rwmtx_rlock(&tracer_mtx);
if ((tnif = hash_get(tracer_hash, &tnif_tmpl)) == NULL) {
erts_rwmtx_runlock(&tracer_mtx);