[erlang-questions] processes stuck in erlang:bif_return_trap/1

H.Li H.Li@REDACTED
Tue Sep 9 10:09:16 CEST 2014



Many thanks! That's helpful.

Regards,
Huiqing


On Tue, Sep 09, 2014 at 12:06:54AM +0200, Jesper Louis Andersen wrote:
> On Mon, Sep 8, 2014 at 10:30 PM, <H.Li@REDACTED> wrote:
> 
> > I don't quite understand what erlang:bif_return_trap/1 does, and am
> > confused why so many processes got stuck in this function.
> >
> 
> It is a Red Herring(tm)[0].
> 
> Suppose the VM has to execute some BIF, link for example, for a process P.
> In the course of linking P to another process, the VM will figure out it
> needs to send a distributed message and that the distribution channel is
> clogged up. So the VM suspends P until the link message has succeeded. The
> problem now, is that we can't return to P, since it is suspended, and we
> have a result from the link function we wish to tell P once it is
> unsuspended. We can bump the reduction counter to 0, but this will still
> have P execute until the next reduction counter bump, which is not what we
> want.
> 
> This is where bif_return_trap/1 comes in. We mangle the state of P such
> that when it unsuspends, it is executing bif_return_trap/1 and the value is
> ready for returning. That is, we arrange it such that bif_return_trap/1 is
> an immediate continuation of the program.
> 
> This is why it is a red herring. Some other function has executed and
> mangled your current state. If distribution/ports are in play, consider
> using erlang:system_monitor/2 to watch over the errornous state. There are
> some old posts by Paul Davis and Scott L. Fritchie which could be somewhat
> related:
> 
> http://erlang.org/pipermail/erlang-questions/2012-December/071157.html
> 
> [0] Ni! Ni! Ni! Ni! Ni!
> 
> 
> -- 
> J.



More information about the erlang-questions mailing list