diff options
author | Rickard Green <[email protected]> | 2012-09-14 21:42:11 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2012-12-03 21:18:09 +0100 |
commit | 34fc6f243f8a462f4b2370a9fe5376df1ca08f1d (patch) | |
tree | 1a7377203f573c40269f12b59611a68e0859c627 /erts/emulator/beam/erl_port_task.c | |
parent | 620c8c5bfe4c2b306a7bc0a7d41749bddea4ee62 (diff) | |
download | otp-34fc6f243f8a462f4b2370a9fe5376df1ca08f1d.tar.gz otp-34fc6f243f8a462f4b2370a9fe5376df1ca08f1d.tar.bz2 otp-34fc6f243f8a462f4b2370a9fe5376df1ca08f1d.zip |
Move busy port flag
Diffstat (limited to 'erts/emulator/beam/erl_port_task.c')
-rw-r--r-- | erts/emulator/beam/erl_port_task.c | 6 |
1 files changed, 6 insertions, 0 deletions
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); } |