[erlang-questions] An answer: how does SASL know that a process died?

Bengt Kleberg bengt.kleberg@REDACTED
Thu Oct 31 12:55:49 CET 2013


The width of a tab, counted in number of spaces, should user
configurable.


bengt

On Thu, 2013-10-31 at 12:43 +0100, Anthony Ramine wrote:
> Re: indentation: blame the Emacs mode which uses GNU style indents: X
> spaces, replace any consecutive 8 spaces by a hard tab. It's quite
> clever in fact but most tools (especially that damn GitHub) can't cope
> with it cleanly.
> 
> -- 
> Anthony Ramine
> 
> Le 31 oct. 2013 à 12:11, Pierre Fenoll <pierrefenoll@REDACTED> a
> écrit :
> 
> 
> > There, nox: https://github.com/nox/otp/compare/better-error-reports
> > (BTW you seem to have a mix of tabs and spaces in your code)
> > 
> > 
> > 
> > Cheers,
> > -- 
> > Pierre Fenoll
> > 
> > 
> > 
> > 
> > On 31 October 2013 10:51, Anthony Ramine <n.oxyde@REDACTED> wrote:
> >         Even if we sent a structured term to the error logger, we
> >         would need to limit its size because the error term and
> >         stack trace is copied on the error logger heap and can be
> >         very very huge.
> >         
> >         Shameless plug: my better-error-reports (IIRC the name,
> >         can't check right now) aims first to improve stack trace
> >         formatting and second to improve the terms sent to the error
> >         logger.
> >         
> >         --
> >         Anthony Ramine
> >         
> >         > Le 31 oct. 2013 à 11:27, Matthias Lang
> >         <matthias@REDACTED> a écrit :
> >         >
> >         > Hi,
> >         >
> >         > TLDR: Whenever an Erlang process dies an abnormal death,
> >         there's some
> >         >      code deep in the VM which sends an unstructured
> >         message to
> >         >      error_logger about the death. This was surprising to
> >         me.
> >         >
> >         >
> >         > The Question
> >         > ------------
> >         >
> >         > I was going to ask "where does this 'ERROR REPORT' message
> >         come from?":
> >         >
> >         >   ~ >erl -boot start_sasl
> >         >   Erlang R15B03 (erts-5.9.3.1)...
> >         >   ...
> >         >   1> spawn(fun() -> 3 = 9 end).
> >         >   <0.42.0>
> >         >   2>
> >         >   =ERROR REPORT==== 31-Oct-2013::10:51:47 ===
> >         >   Error in process <0.42.0> with exit value:
> >         {{badmatch,9},[{erl_eval,expr,3,[]}]}
> >         >
> >         > But before asking, I dug out the answer myself. So this
> >         post is a
> >         > question with the answer supplied. Hope someone's
> >         interested.
> >         >
> >         > Anyway, this "Error in process <0.42.0>" message, how can
> >         that
> >         > possibly work?
> >         >
> >         >
> >         > Impossible answers
> >         > ------------------
> >         >
> >         > No Erlang process is linked to <0.42.0>---I used plain
> >         spawn()---so it
> >         > can't work through links.
> >         >
> >         > No Erlang process is monitoring <0.42.0>, so that's out
> >         too.
> >         >
> >         > I even checked that there's no tracing on. There isn't.
> >         >
> >         > I can't find anything in the 'Barklund Draft' which says
> >         that abnormal
> >         > process death should give information to another process
> >         through any
> >         > other mechanism. So, this is a top secret part of Erlang,
> >         available
> >         > only to helmeted, blonde, bearded eaters of rotten fish.
> >         >
> >         >
> >         > The actual answer
> >         > -----------------
> >         >
> >         > Deep in "beam_emu.c", there's terminate_proc(). Here's
> >         what it does:
> >         >
> >         >   erts_dsprintf_buf_t *dsbufp =
> >         erts_create_logger_dsbuf();
> >         >   erts_dsprintf(dsbufp, "Error in process %T ", c_p->id);
> >         >   erts_dsprintf(dsbufp,"with exit value: %0.*T\n",
> >         display_items, Value);
> >         >   erts_send_error_to_logger(c_p->group_leader, dsbufp);
> >         >
> >         > So, the exit value term, i.e. {badmatch, 9} and the stack
> >         trace is
> >         > turned into a string (!) and then sent to the process
> >         registered as
> >         > 'error_logger'.
> >         >
> >         > It seems OTP invaded the Erlang VM a bit... The other
> >         times I've seen
> >         > the VM send messages to the error logger, it's because
> >         something's on
> >         > fire, e.g. distribution has gone nuts. Not something
> >         mundane like a
> >         > process dying. Seems like a quick hack left over from long
> >         ago.
> >         >
> >         >
> >         > The fix
> >         > -------
> >         >
> >         > If you implement your own error_logger, it's tempting to
> >         match these
> >         > messages so you can do things with them---you might want
> >         to format
> >         > them differently, or someone might have a burning need to
> >         translate
> >         > them to Maori---but this is unpalatable because the
> >         message comes as a
> >         > string.
> >         >
> >         > That leaves the approach taken by proc_lib:spawn(), which
> >         is to wrap
> >         > the spawned code in a 'try', which means the VM never gets
> >         its fingers
> >         > on that crash. And that then gets you back to what I
> >         expected: if I
> >         > spawn() a process, I want it to just die quietly, even if
> >         it
> >         > crashes. Shame that's not the default.
> >         >
> >         > Matt
> >         > _______________________________________________
> >         > erlang-questions mailing list
> >         > erlang-questions@REDACTED
> >         > http://erlang.org/mailman/listinfo/erlang-questions
> >         _______________________________________________
> >         erlang-questions mailing list
> >         erlang-questions@REDACTED
> >         http://erlang.org/mailman/listinfo/erlang-questions
> >         
> > 
> > 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list