aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2017-08-23 12:29:50 +0200
committerSverker Eriksson <[email protected]>2017-08-23 12:29:50 +0200
commit7c9ea890cd2530bffeafa82abeeee876fd24a6ba (patch)
tree839aec8b295d6e06361a79b3171fed906f94339b
parentf0715ae80670b12f4120f2b9d3b7bd51be690ea8 (diff)
downloadotp-7c9ea890cd2530bffeafa82abeeee876fd24a6ba.tar.gz
otp-7c9ea890cd2530bffeafa82abeeee876fd24a6ba.tar.bz2
otp-7c9ea890cd2530bffeafa82abeeee876fd24a6ba.zip
erts: Allow any unicode string as crash dump slogan
i.e the first argument to erlang:halt
-rw-r--r--erts/doc/src/erlang.xml17
-rw-r--r--erts/emulator/beam/bif.c2
-rw-r--r--erts/emulator/test/bif_SUITE.erl3
3 files changed, 14 insertions, 8 deletions
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index 687ff38cbf..4a00d24cee 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -1943,23 +1943,26 @@ os_prompt%</pre>
<item>The runtime system exits with integer value
<c><anno>Status</anno></c>
as status code to the calling environment (OS).
+ <note>
+ <p>On many platforms, the OS supports only status
+ codes 0-255. A too large status code is truncated by clearing
+ the high bits.</p>
+ </note>
</item>
<tag>string()</tag>
<item>An Erlang crash dump is produced with <c><anno>Status</anno></c>
as slogan. Then the runtime system exits with status code <c>1</c>.
- Note that only code points in the range 0-255 may be used
- and the string will be truncated if longer than 200 characters.
+ The string will be truncated if longer than 200 characters.
+ <note>
+ <p>Before ERTS 9.1 (OTP-20.1) only code points in the range 0-255
+ was accepted in the string. Now any unicode string is valid.</p>
+ </note>
</item>
<tag><c>abort</c></tag>
<item>The runtime system aborts producing a core dump, if that is
enabled in the OS.
</item>
</taglist>
- <note>
- <p>On many platforms, the OS supports only status
- codes 0-255. A too large status code is truncated by clearing
- the high bits.</p>
- </note>
<p>For integer <c><anno>Status</anno></c>, the Erlang runtime system
closes all ports and allows async threads to finish their
operations before exiting. To exit without such flushing, use
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index 8bf7e3926e..4c92b9ba2b 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -4020,7 +4020,7 @@ BIF_RETTYPE halt_2(BIF_ALIST_2)
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
erts_exit(ERTS_ABORT_EXIT, "");
}
- else if (is_string(BIF_ARG_1) || BIF_ARG_1 == NIL) {
+ else if (is_list(BIF_ARG_1) || BIF_ARG_1 == NIL) {
# define HALT_MSG_SIZE 200
static byte halt_msg[4*HALT_MSG_SIZE+1];
Sint written;
diff --git a/erts/emulator/test/bif_SUITE.erl b/erts/emulator/test/bif_SUITE.erl
index 339c827602..4908ac410c 100644
--- a/erts/emulator/test/bif_SUITE.erl
+++ b/erts/emulator/test/bif_SUITE.erl
@@ -691,6 +691,9 @@ erlang_halt(Config) when is_list(Config) ->
{badrpc,nodedown} = rpc:call(N3, erlang, halt, [0,[]]),
{ok,N4} = slave:start(H, halt_node4),
{badrpc,nodedown} = rpc:call(N4, erlang, halt, [lists:duplicate(300,$x)]),
+ %% Test unicode slogan
+ {ok,N4} = slave:start(H, halt_node4),
+ {badrpc,nodedown} = rpc:call(N4, erlang, halt, [[339,338,254,230,198,295,167,223,32,12507,12531,12480]]),
% This test triggers a segfault when dumping a crash dump
% to make sure that we can handle it properly.