[erlang-bugs] Combination of erl flags "+B" and "-smp enable" renders producing crash dumps impossible

Masatake Daimon daimon@REDACTED
Wed Feb 17 07:08:24 CET 2016


Hello,

I found a bug in OTP 18.2.1 on Linux. When the erl flag "+B" is given, 
and SMP is enabled, erts fails to produce a crash dump but instead kills 
itself with SIGUSR2:

> $ erl -smp enable -noshell -eval 'erlang:halt("Hello").'
>
> Crash dump is being written to: erl_crash.dump...done
> Hello
> $ echo $?
> 1
> $ erl -smp disable +B -noshell -eval 'erlang:halt("Hello").'
>
> Crash dump is being written to: erl_crash.dump...done
> Hello
> $ rm erl_crash.dump
> $ erl -smp enable +B -noshell -eval 'erlang:halt("Hello").'
> User defined signal 2
> $ echo $?
> 140
> $ ls erl_crash.dump
> ls: erl_crash.dump: No such file or directory

The reason for this behavior is as follows:
* When the +B flag is given, erl_start() (beam/erl_init.c:2133) skips 
calling init_break_handler().
* But init_break_handler() (sys/unix/sys.c:970) is the only function 
which registers a signal handler for SIGUSR2.
* When a crash dump is being produced, erl_crash_dump_v() 
(beam/break.c:694) sends SIGUSR2 to each scheduler thread.
* Since there is no handler for SIGUSR2, the whole process terminates.

I'm posting the report to the ML instead of submitting a pull request 
because I'm not sure how to fix this properly. This is especially 
problematic for escripts because main() (etc/common/escript.c:459) 
automatically sets the +B flag. I hope someone familiar with these 
things can resolve the problem.

Kind regards,
Masatake Daimon
-- 
大門 正岳 <daimon@REDACTED>




More information about the erlang-bugs mailing list