From 77e8d12f0b0479bd9bddb5d4f54a4d9e0109b888 Mon Sep 17 00:00:00 2001 From: Rickard Green Date: Wed, 10 Nov 2010 17:47:03 +0100 Subject: Fix erts_schedule_misc_op() so it can be called from arbitrary threads Tracing to port could cause an emulator crash when unloading the trace driver. --- erts/emulator/beam/erl_process.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'erts/emulator/beam/erl_process.c') diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 901167a315..7631c483ed 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -7497,6 +7497,15 @@ erts_schedule_misc_op(void (*func)(void *), void *arg) ErtsRunQueue *rq = erts_get_runq_current(NULL); ErtsMiscOpList *molp = misc_op_list_alloc(); + if (!rq) { + /* + * This can only happen when the sys msg dispatcher + * thread schedules misc ops (this happens *very* + * seldom; only when trace drivers are unloaded). + */ + rq = ERTS_RUNQ_IX(0); + } + erts_smp_runq_lock(rq); while (rq->misc.evac_runq) { -- cgit v1.2.3