diff options
author | Henrik Nord <[email protected]> | 2015-08-20 10:16:12 +0200 |
---|---|---|
committer | Henrik Nord <[email protected]> | 2015-08-20 10:16:12 +0200 |
commit | 25be5551705cf64f2ecc7be5f6c64c9c908e2938 (patch) | |
tree | b7de5288a61f639972cba56e4868694eba917375 /lib | |
parent | 92f855b86e0c5c68d98465f8dc6ba6bc90618154 (diff) | |
parent | e3a5ad489d6e6cc190b609f8648b6af993c1b333 (diff) | |
download | otp-25be5551705cf64f2ecc7be5f6c64c9c908e2938.tar.gz otp-25be5551705cf64f2ecc7be5f6c64c9c908e2938.tar.bz2 otp-25be5551705cf64f2ecc7be5f6c64c9c908e2938.zip |
Merge branch 'maint'
Conflicts:
OTP_VERSION
erts/vsn.mk
Diffstat (limited to 'lib')
-rw-r--r-- | lib/kernel/test/standard_error_SUITE.erl | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/kernel/test/standard_error_SUITE.erl b/lib/kernel/test/standard_error_SUITE.erl index e8917bbd47..97ead9b9fd 100644 --- a/lib/kernel/test/standard_error_SUITE.erl +++ b/lib/kernel/test/standard_error_SUITE.erl @@ -21,13 +21,13 @@ -module(standard_error_SUITE). -export([all/0,suite/0]). --export([badarg/1,getopts/1]). +-export([badarg/1,getopts/1,output/1]). suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> - [badarg,getopts]. + [badarg,getopts,output]. badarg(Config) when is_list(Config) -> {'EXIT',{badarg,_}} = (catch io:put_chars(standard_error, [oops])), @@ -37,3 +37,30 @@ badarg(Config) when is_list(Config) -> getopts(Config) when is_list(Config) -> [{encoding,latin1}] = io:getopts(standard_error), ok. + +%% Test that writing a lot of output to standard_error does not cause the +%% processes handling it to terminate like this: +%% +%% =ERROR REPORT==== 9-Aug-2015::23:19:23 === +%% ** Generic server standard_error_sup terminating +%% ** Last message in was {'EXIT',<0.28.0>,eagain} +%% ** When Server state == {state,standard_error,undefined,<0.28.0>, +%% {local,standard_error_sup}} +%% ** Reason for termination == +%% ** eagain +%% +%% This problem, observed with Erlang 18.0.2, was fixed in fd_driver by +%% properly handling EAGAIN if it arises on file descriptor writes. +%% +output(Config) when is_list(Config) -> + Ref = monitor(process, standard_error_sup), + Chars = [ [["1234567890" || _ <- lists:seq(1,10)], $\s, + integer_to_list(L), $\r, $\n] || L <- lists:seq(1, 100) ], + ok = io:put_chars(standard_error, Chars), + receive + {'DOWN', Ref, process, _, _} -> + error(standard_error_noproc) + after + 500 -> + ok + end. |