From 455cbcf2230715b37da14573cb9ba60a68c24a26 Mon Sep 17 00:00:00 2001 From: Rickard Green Date: Fri, 18 Mar 2016 11:55:48 +0100 Subject: Fix implementation of dropped signal to port --- erts/emulator/beam/io.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index 8c67f731f4..9a67e05bfa 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -1501,8 +1501,19 @@ erts_schedule_proc2port_signal(Process *c_p, erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MAIN); if (sched_res != 0) { - if (refp) + if (refp) { + /* + * We need to restore the message queue save + * pointer to the beginning of the message queue + * since the caller now wont wait for a message + * containing the reference created above... + */ + ASSERT(c_p); + erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE); + JOIN_MESSAGE(c_p); + erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE); *refp = NIL; + } return ERTS_PORT_OP_DROPPED; } return ERTS_PORT_OP_SCHEDULED; -- cgit v1.2.3