From 34fc6f243f8a462f4b2370a9fe5376df1ca08f1d Mon Sep 17 00:00:00 2001 From: Rickard Green Date: Fri, 14 Sep 2012 21:42:11 +0200 Subject: Move busy port flag --- erts/emulator/beam/erl_port_task.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'erts/emulator/beam/erl_port_task.c') diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c index edcd3112da..dceecda973 100644 --- a/erts/emulator/beam/erl_port_task.c +++ b/erts/emulator/beam/erl_port_task.c @@ -530,6 +530,7 @@ fail: void erts_port_task_free_port(Port *pp) { + ErtsProcList *suspended; erts_aint32_t flags; ErtsRunQueue *runq; @@ -542,6 +543,8 @@ erts_port_task_free_port(Port *pp) erts_port_task_sched_lock(&pp->sched); flags = erts_smp_atomic32_read_bor_relb(&pp->sched.flags, ERTS_PTS_FLG_EXIT); + suspended = pp->suspended; + pp->suspended = NULL; erts_port_task_sched_unlock(&pp->sched); erts_atomic32_read_bset_relb(&pp->state, (ERTS_PORT_SFLG_CLOSING @@ -550,6 +553,9 @@ erts_port_task_free_port(Port *pp) erts_smp_runq_unlock(runq); + if (erts_proclist_fetch(&suspended, NULL)) + erts_resume_processes(suspended); + if (!(flags & (ERTS_PTS_FLG_IN_RUNQ|ERTS_PTS_FLG_EXEC))) begin_port_cleanup(pp, NULL); } -- cgit v1.2.3