[erlang-questions] An answer: how does SASL know that a process died?
Anthony Ramine
n.oxyde@REDACTED
Thu Oct 31 12:58:09 CET 2013
Are we really going to debate this?
I don’t want to, but I also don’t want to read people stating their opinion as if they were facts.
--
Anthony Ramine
Le 31 oct. 2013 à 12:55, Bengt Kleberg <bengt.kleberg@REDACTED> a écrit :
> 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
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list