Prioritised process mailbox handling can block indefinitely
Closed this issue · 0 comments
hyperthunk commented
To simulate this, create a sender that simply goes forever $ cast serverPid () and watch your machine run out of memory (while not much else happens).
Control flow has never been part of Erlang's gen_server API, and neither should it be applicable here. However, we won't have a change to notice that we're overloaded if the server never gets around to responding to any of its inputs, and that's what is happening here.
We enter a loop to drain the mailbox, but do not break out of it. There is a policy item that references this situation, but the pserve implementation ignores it!
Notes: this is only broken for prioritised mailboxes, and will be a fairly simple fix.