aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel')
-rw-r--r--lib/kernel/doc/src/app.xml4
-rw-r--r--lib/kernel/doc/src/code.xml4
-rw-r--r--lib/kernel/doc/src/disk_log.xml3
-rw-r--r--lib/kernel/doc/src/erl_ddll.xml2
-rw-r--r--lib/kernel/doc/src/file.xml20
-rw-r--r--lib/kernel/doc/src/gen_sctp.xml77
-rw-r--r--lib/kernel/doc/src/net_kernel.xml8
-rw-r--r--lib/kernel/doc/src/notes.xml56
-rw-r--r--lib/kernel/src/application.erl12
-rw-r--r--lib/kernel/src/code_server.erl2
-rw-r--r--lib/kernel/src/disk_log.erl22
-rw-r--r--lib/kernel/test/code_SUITE.erl21
-rw-r--r--lib/kernel/test/disk_log_SUITE.erl11
-rw-r--r--lib/kernel/test/gen_sctp_SUITE.erl57
-rw-r--r--lib/kernel/test/inet_SUITE.erl2
-rw-r--r--lib/kernel/test/inet_res_SUITE.erl12
-rwxr-xr-xlib/kernel/test/inet_res_SUITE_data/run-named4
17 files changed, 202 insertions, 115 deletions
diff --git a/lib/kernel/doc/src/app.xml b/lib/kernel/doc/src/app.xml
index ef1f5985f4..ff8a12fe97 100644
--- a/lib/kernel/doc/src/app.xml
+++ b/lib/kernel/doc/src/app.xml
@@ -4,7 +4,7 @@
<fileref>
<header>
<copyright>
- <year>1997</year><year>2009</year>
+ <year>1997</year><year>2011</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -170,7 +170,6 @@ Phases [{Phase,PhaseArgs}] undefined
start phase defined by the <c>start_phases</c> key, and only
after this extended start procedure will
<c>application:start(Application)</c> return.</p>
- <p></p>
<p>Start phases may be used to synchronize startup of an
application and its included applications. In this case,
the <c>mod</c> key must be specified as:</p>
@@ -182,7 +181,6 @@ Phases [{Phase,PhaseArgs}] undefined
for the primary application) both for the primary application
and for each of its included application, for which the start
phase is defined.</p>
- <p></p>
<p>This implies that for an included application, the set of
start phases must be a subset of the set of phases defined
for the primary application. Refer to <em>OTP Design Principles</em> for more information.</p>
diff --git a/lib/kernel/doc/src/code.xml b/lib/kernel/doc/src/code.xml
index 98cdd416b0..6b89711924 100644
--- a/lib/kernel/doc/src/code.xml
+++ b/lib/kernel/doc/src/code.xml
@@ -177,9 +177,9 @@
archives. But the functions in <c>erl_prim_loader</c> may also be
used by other applications to read files from archives. For
example, the call
- <c>erl_prim_loader:list_dir("/otp/root/lib/mnesia-4.4.7.ez/mnesia-4.4.7/examples/bench)"</c>
+ <c>erl_prim_loader:list_dir( "/otp/root/lib/mnesia-4.4.7.ez/mnesia-4.4.7/examples/bench)"</c>
would list the contents of a directory inside an archive.
- See <seealso marker="erts:erl_prim_loader">erl_prim_loader(3)</seealso></p>
+ See <seealso marker="erts:erl_prim_loader">erl_prim_loader(3)</seealso></p>.
<p>An application archive file and a regular application directory
may coexist. This may be useful when there is a need of having
diff --git a/lib/kernel/doc/src/disk_log.xml b/lib/kernel/doc/src/disk_log.xml
index 9721907162..d278d54d93 100644
--- a/lib/kernel/doc/src/disk_log.xml
+++ b/lib/kernel/doc/src/disk_log.xml
@@ -475,8 +475,7 @@
<fsummary>Close a disk log.</fsummary>
<type name="close_error_rsn"/>
<desc>
- <p> <marker id="close_1"></marker>
-The function <c>close/1</c> closes a
+ <p><marker id="close_1"></marker>The function <c>close/1</c> closes a
local or distributed disk log properly. An internally
formatted log must be closed before the Erlang system is
stopped, otherwise the log is regarded as unclosed and the
diff --git a/lib/kernel/doc/src/erl_ddll.xml b/lib/kernel/doc/src/erl_ddll.xml
index f9514dda2f..1911fb628e 100644
--- a/lib/kernel/doc/src/erl_ddll.xml
+++ b/lib/kernel/doc/src/erl_ddll.xml
@@ -989,7 +989,7 @@
<c>{ok, pending_driver}</c> or <c>{ok, pending_process}</c>.</p>
</item>
</taglist>
- <p>The <c>pending_driver</c><c>MonitorOption</c> is by far
+ <p>The <c>pending_driver</c> <c>MonitorOption</c> is by far
the most useful and it has to be used to ensure that the
driver has really been unloaded and the ports closed
whenever the <c>kill_ports</c> option is used or the
diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml
index 861c582211..7db20e6343 100644
--- a/lib/kernel/doc/src/file.xml
+++ b/lib/kernel/doc/src/file.xml
@@ -60,11 +60,13 @@
converted, why the Unicode mode for file names is not default on
systems having completely transparent file naming.</p>
- <note>As of R14B01, the most basic file handling modules
- (<c>file</c>, <c>prim_file</c>, <c>filelib</c> and
- <c>filename</c>) accept raw file names, but the rest of OTP is not
- guaranteed to handle them, why Unicode file naming on systems
- where it is not default is still considered experimental.</note>
+ <note>
+ <p>As of R14B01, the most basic file handling modules
+ (<c>file</c>, <c>prim_file</c>, <c>filelib</c> and
+ <c>filename</c>) accept raw file names, but the rest of OTP is not
+ guaranteed to handle them, why Unicode file naming on systems
+ where it is not default is still considered experimental.</p>
+ </note>
<p>Raw file names is a new feature in OTP R14B01, which allows the
user to supply completely uninterpreted file names to the
@@ -249,11 +251,9 @@
</item>
</taglist>
<p>Example:</p>
- <code type="none">
-f.txt: {person, "kalle", 25}.
+<code type="none">f.txt: {person, "kalle", 25}.
{person, "pelle", 30}.</code>
- <pre>
-1> <input>file:consult("f.txt").</input>
+<pre>1> <input>file:consult("f.txt").</input>
{ok,[{person,"kalle",25},{person,"pelle",30}]}</pre>
</desc>
</func>
@@ -362,7 +362,6 @@ f.txt: {person, "kalle", 25}.
<p>In a future release, a bad type for the
<c><anno>Filename</anno></c> argument will probably generate
an exception.</p>
- <p></p>
</warning>
</desc>
</func>
@@ -1523,7 +1522,6 @@ f.txt: {person, "kalle", 25}.
<p>In a future release, a bad type for the
<c><anno>Dir</anno></c>
argument will probably generate an exception.</p>
- <p></p>
</warning>
</desc>
</func>
diff --git a/lib/kernel/doc/src/gen_sctp.xml b/lib/kernel/doc/src/gen_sctp.xml
index cc49090386..688cd0f78f 100644
--- a/lib/kernel/doc/src/gen_sctp.xml
+++ b/lib/kernel/doc/src/gen_sctp.xml
@@ -47,8 +47,7 @@
SUSE Linux Enterprise Server 10 Service Pack 1 (x86_64)
kernel 2.6.16.54-0.2.3-smp with lksctp-tools-1.0.7.</p>
<p>Record definitions for the <c>gen_sctp</c> module can be found using:</p>
- <pre>
- -include_lib("kernel/include/inet_sctp.hrl"). </pre>
+<pre> -include_lib("kernel/include/inet_sctp.hrl"). </pre>
<p>These record definitions use the "new" spelling 'adaptation',
not the deprecated 'adaption', regardless of which
spelling the underlying C API uses.</p>
@@ -152,8 +151,7 @@
The result of <c>connect/*</c> is an <c>#sctp_assoc_change{}</c>
event which contains, in particular, the new
<seealso marker="#type-assoc_id">Association ID</seealso>.</p>
- <pre>
- #sctp_assoc_change{
+<pre> #sctp_assoc_change{
state = atom(),
error = atom(),
outbound_streams = integer(),
@@ -163,8 +161,7 @@
<p>The number of outbound and inbound streams can be set by
giving an <c>sctp_initmsg</c> option to <c>connect</c>
as in:</p>
- <pre>
- connect(<anno>Socket</anno>, Ip, <anno>Port</anno>,
+<pre> connect(<anno>Socket</anno>, Ip, <anno>Port</anno>,
[{sctp_initmsg,#sctp_initmsg{num_ostreams=OutStreams,
max_instreams=MaxInStreams}}]) </pre>
<p>All options <c><anno>Opt</anno></c> are set on the socket before the
@@ -340,8 +337,7 @@
<p><seealso marker="#record-sctp_assoc_change">#sctp_assoc_change{}</seealso>;</p>
</item>
<item>
- <pre>
- #sctp_paddr_change{
+<pre> #sctp_paddr_change{
addr = {ip_address(),port()},
state = atom(),
error = integer(),
@@ -378,8 +374,7 @@
converted into a string using <c>error_string/1</c>.</p>
</item>
<item>
- <pre>
- #sctp_send_failed{
+<pre> #sctp_send_failed{
flags = true | false,
error = integer(),
info = #sctp_sndrcvinfo{},
@@ -399,8 +394,7 @@
returned by <c>recv/*</c>.</p>
</item>
<item>
- <pre>
- #sctp_adaptation_event{
+<pre> #sctp_adaptation_event{
adaptation_ind = integer(),
assoc_id = assoc_id()
} </pre>
@@ -411,8 +405,7 @@
the Erlang/SCTP binding, this event is disabled by default.</p>
</item>
<item>
- <pre>
- #sctp_pdapi_event{
+<pre> #sctp_pdapi_event{
indication = sctp_partial_delivery_aborted,
assoc_id = assoc_id()
} </pre>
@@ -469,7 +462,7 @@
<marker id="option-binary"></marker>
<marker id="option-list"></marker>
<taglist>
- <tag><c>{mode, list|binary}</c>or just <c>list</c> or <c>binary</c>.</tag>
+ <tag><c>{mode, list|binary}</c> or just <c>list</c> or <c>binary</c></tag>
<item>
<p>Determines the type of data returned from <c>gen_sctp:recv/1,2</c>.</p>
<marker id="option-active"></marker>
@@ -562,8 +555,7 @@
</item>
<tag><c>{sctp_rtoinfo, #sctp_rtoinfo{}}</c></tag>
<item>
- <pre>
- #sctp_rtoinfo{
+<pre> #sctp_rtoinfo{
assoc_id = assoc_id(),
initial = integer(),
max = integer(),
@@ -577,8 +569,7 @@
</item>
<tag><c>{sctp_associnfo, #sctp_assocparams{}}</c></tag>
<item>
- <pre>
- #sctp_assocparams{
+<pre> #sctp_assocparams{
assoc_id = assoc_id(),
asocmaxrxt = integer(),
number_peer_destinations = integer(),
@@ -593,8 +584,7 @@
</item>
<tag><c>{sctp_initmsg, #sctp_initmsg{}}</c></tag>
<item>
- <pre>
- #sctp_initmsg{
+<pre> #sctp_initmsg{
num_ostreams = integer(),
max_instreams = integer(),
max_attempts = integer(),
@@ -622,7 +612,6 @@
for establishing an association.</p>
</item>
</list>
- <p></p>
</item>
<tag><c>{sctp_autoclose, integer() >= 0}</c></tag>
<item>
@@ -657,8 +646,7 @@
</item>
<tag><c>{sctp_primary_addr, #sctp_prim{}}</c></tag>
<item>
- <pre>
- #sctp_prim{
+<pre> #sctp_prim{
assoc_id = assoc_id(),
addr = {IP, Port}
}
@@ -671,8 +659,7 @@
</item>
<tag><c>{sctp_set_peer_primary_addr, #sctp_setpeerprim{}}</c></tag>
<item>
- <pre>
- #sctp_setpeerprim{
+<pre> #sctp_setpeerprim{
assoc_id = assoc_id(),
addr = {IP, Port}
}
@@ -686,8 +673,7 @@
<tag><c>{sctp_adaptation_layer, #sctp_setadaptation{}}</c></tag>
<item>
<marker id="record-sctp_setadaptation"></marker>
- <pre>
- #sctp_setadaptation{
+<pre> #sctp_setadaptation{
adaptation_ind = integer()
} </pre>
<p>When set, requests that the local endpoint uses the value given by
@@ -698,8 +684,7 @@
</item>
<tag><c>{sctp_peer_addr_params, #sctp_paddrparams{}}</c></tag>
<item>
- <pre>
- #sctp_paddrparams{
+<pre> #sctp_paddrparams{
assoc_id = assoc_id(),
address = {IP, Port},
hbinterval = integer(),
@@ -756,16 +741,13 @@
<p><c>sackdelay_disable</c>: disable SAC delay.</p>
</item>
</list>
- <p></p>
</item>
</list>
- <p></p>
</item>
<tag><c>{sctp_default_send_param, #sctp_sndrcvinfo{}}</c></tag>
<item>
<marker id="record-sctp_sndrcvinfo"></marker>
- <pre>
- #sctp_sndrcvinfo{
+<pre> #sctp_sndrcvinfo{
stream = integer(),
ssn = integer(),
flags = list(),
@@ -807,20 +789,17 @@
association, with flushing of unsent data.</p>
</item>
</list>
- <p></p>
<p>Other fields are rarely used. See
<url href="http://www.rfc-archive.org/getrfc.php?rfc=2960">RFC2960</url> and
<url href="http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13">Sockets API Extensions for SCTP</url> for full information.</p>
</item>
</list>
- <p></p>
<marker id="option-sctp_events"></marker>
</item>
<tag><c>{sctp_events, #sctp_event_subscribe{}}</c></tag>
<item>
<marker id="record-sctp_event_subscribe"></marker>
- <pre>
- #sctp_event_subscribe{
+<pre> #sctp_event_subscribe{
data_io_event = true | false,
association_event = true | false,
address_event = true | false,
@@ -845,8 +824,7 @@
</item>
<tag><c>{sctp_delayed_ack_time, #sctp_assoc_value{}}</c></tag>
<item>
- <pre>
- #sctp_assoc_value{
+<pre> #sctp_assoc_value{
assoc_id = assoc_id(),
assoc_value = integer()
} </pre>
@@ -857,8 +835,7 @@
</item>
<tag><c>{sctp_status, #sctp_status{}}</c></tag>
<item>
- <pre>
- #sctp_status{
+<pre> #sctp_status{
assoc_id = assoc_id(),
state = atom(),
rwnd = integer(),
@@ -930,14 +907,12 @@
address (see below for the format of <c>#sctp_paddrinfo{}</c>).</p>
</item>
</list>
- <p></p>
<marker id="option-sctp_get_peer_addr_info"></marker>
</item>
<tag><c>{sctp_get_peer_addr_info, #sctp_paddrinfo{}}</c></tag>
<item>
<marker id="record-sctp_paddrinfo"></marker>
- <pre>
- #sctp_paddrinfo{
+<pre> #sctp_paddrinfo{
assoc_id = assoc_id(),
address = {IP, Port},
state = inactive | active,
@@ -968,8 +943,7 @@
<item>
<p>Example of an Erlang SCTP Server which receives SCTP messages and
prints them on the standard output:</p>
- <pre>
- -module(sctp_server).
+<pre> -module(sctp_server).
-export([server/0,server/1,server/2]).
-include_lib("kernel/include/inet.hrl").
@@ -998,7 +972,6 @@
io:format("Received: ~p~n", [Data])
end,
server_loop(S). </pre>
- <p></p>
</item>
<item>
<p>Example of an Erlang SCTP Client which interacts with the above Server.
@@ -1008,8 +981,7 @@
over Stream 5 fails. The client then <c>abort</c>s the association,
which results in the corresponding Event being received on
the Server side.</p>
- <pre>
- -module(sctp_client).
+<pre> -module(sctp_client).
-export([client/0, client/1, client/2]).
-include_lib("kernel/include/inet.hrl").
@@ -1042,13 +1014,11 @@
timer:sleep(1000),
gen_sctp:close(S). </pre>
- <p></p>
</item>
<item>
<p>A very simple Erlang SCTP Client which uses the
connect_init API.</p>
- <pre>
--module(ex3).
+<pre>-module(ex3).
-export([client/4]).
-include_lib("kernel/include/inet.hrl").
@@ -1101,7 +1071,6 @@ client_loop(S, Peer1, Port1, AssocId1, Peer2, Port2, AssocId2) -&gt;
ok
end.
</pre>
- <p></p>
</item>
</list>
</section>
diff --git a/lib/kernel/doc/src/net_kernel.xml b/lib/kernel/doc/src/net_kernel.xml
index 96e2aa665d..3b7a710664 100644
--- a/lib/kernel/doc/src/net_kernel.xml
+++ b/lib/kernel/doc/src/net_kernel.xml
@@ -37,13 +37,10 @@
monitoring of the network.</p>
<p>An Erlang node is started using the command line flag
<c>-name</c> or <c>-sname</c>:</p>
- <pre>
-$ <input>erl -sname foobar</input></pre>
+<pre>$ <input>erl -sname foobar</input></pre>
<p>It is also possible to call <c>net_kernel:start([foobar])</c>
directly from the normal Erlang shell prompt:</p>
- <p></p>
- <pre>
-1> <input>net_kernel:start([foobar, shortnames]).</input>
+<pre>1> <input>net_kernel:start([foobar, shortnames]).</input>
{ok,&lt;0.64.0>}
(foobar@gringotts)2></pre>
<p>If the node is started with the command line flag <c>-sname</c>,
@@ -226,7 +223,6 @@ $ <input>erl -sname foobar</input></pre>
<c><anno>NetTicktime</anno></c> seconds. <c><anno>TransitionPeriod</anno></c> defaults
to 60.</p>
<p>Some definitions:</p>
- <p></p>
<taglist>
<tag>The minimum transition traffic interval (<c>MTTI</c>)</tag>
<item>
diff --git a/lib/kernel/doc/src/notes.xml b/lib/kernel/doc/src/notes.xml
index fc8360b3d1..ec57b03bd9 100644
--- a/lib/kernel/doc/src/notes.xml
+++ b/lib/kernel/doc/src/notes.xml
@@ -30,6 +30,62 @@
</header>
<p>This document describes the changes made to the Kernel application.</p>
+<section><title>Kernel 2.14.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix type of Packet arg of gen_tcp:send/2 and
+ gen_udp:send/4</p>
+ <p>
+ The type is marked as a binary() or a string() but in
+ practice it can be an iodata(). The test suite was
+ updated to confirm the gen_tcp/2 and gen_udp:send/4
+ functions accept iodata() (iolists) packets. (Thanks to
+ Filipe David Manana)</p>
+ <p>
+ Own Id: OTP-9514</p>
+ </item>
+ <item>
+ <p> XML files have been corrected. </p>
+ <p>
+ Own Id: OTP-9550 Aux Id: OTP-9541 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> The types and specifications of the inet modules have
+ been improved. </p>
+ <p>
+ Own Id: OTP-9260</p>
+ </item>
+ <item>
+ <p> Types and specifications have been added. </p>
+ <p>
+ Own Id: OTP-9356</p>
+ </item>
+ <item>
+ <p> Contracts in STDLIB and Kernel have been improved and
+ type errors have been corrected. </p>
+ <p>
+ Own Id: OTP-9485</p>
+ </item>
+ <item>
+ <p> Update documentation and specifications of some of
+ the zlib functions. </p>
+ <p>
+ Own Id: OTP-9506</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Kernel 2.14.4</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/kernel/src/application.erl b/lib/kernel/src/application.erl
index fa3a4c3d36..caac4d926c 100644
--- a/lib/kernel/src/application.erl
+++ b/lib/kernel/src/application.erl
@@ -28,8 +28,6 @@
-export([get_application/0, get_application/1, info/0]).
-export([start_type/0]).
--export([behaviour_info/1]).
-
%%%-----------------------------------------------------------------
-type start_type() :: 'normal'
@@ -59,12 +57,12 @@
%%------------------------------------------------------------------
--spec behaviour_info(atom()) -> 'undefined' | [{atom(), byte()}].
+-callback start(StartType :: normal | {takeover, node()} | {failover, node()},
+ StartArgs :: term()) ->
+ {ok, pid()} | {ok, pid(), State :: term()} | {error, Reason :: term}.
-behaviour_info(callbacks) ->
- [{start,2},{stop,1}];
-behaviour_info(_Other) ->
- undefined.
+-callback stop(State :: term()) ->
+ term().
%%%-----------------------------------------------------------------
%%% This module is API towards application_controller and
diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl
index 85bbff9cc3..e3d22e7999 100644
--- a/lib/kernel/src/code_server.erl
+++ b/lib/kernel/src/code_server.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2011. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
diff --git a/lib/kernel/src/disk_log.erl b/lib/kernel/src/disk_log.erl
index 9b8d2db437..d6bc23be6d 100644
--- a/lib/kernel/src/disk_log.erl
+++ b/lib/kernel/src/disk_log.erl
@@ -1240,20 +1240,29 @@ is_owner(Pid, L) ->
%% ok | throw(Error)
rename_file(File, NewFile, halt) ->
- file:rename(File, NewFile);
+ case file:rename(File, NewFile) of
+ ok ->
+ ok;
+ Else ->
+ file_error(NewFile, Else)
+ end;
rename_file(File, NewFile, wrap) ->
rename_file(wrap_file_extensions(File), File, NewFile, ok).
-rename_file([Ext|Exts], File, NewFile, Res) ->
- NRes = case file:rename(add_ext(File, Ext), add_ext(NewFile, Ext)) of
+rename_file([Ext|Exts], File, NewFile0, Res) ->
+ NewFile = add_ext(NewFile0, Ext),
+ NRes = case file:rename(add_ext(File, Ext), NewFile) of
ok ->
Res;
Else ->
- Else
+ file_error(NewFile, Else)
end,
- rename_file(Exts, File, NewFile, NRes);
+ rename_file(Exts, File, NewFile0, NRes);
rename_file([], _File, _NewFiles, Res) -> Res.
+file_error(FileName, {error, Error}) ->
+ {error, {file_error, FileName, Error}}.
+
%% "Old" error messages have been kept, arg_mismatch has been added.
%%-spec compare_arg(dlog_options(), #arg{},
compare_arg([], _A, none, _OrigHead) ->
@@ -1947,7 +1956,8 @@ monitor_request(Pid, Req) ->
receive
{'DOWN', Ref, process, Pid, _Info} ->
{error, no_such_log};
- {disk_log, Pid, Reply} ->
+ {disk_log, Pid, Reply} when not is_tuple(Reply) orelse
+ element(2, Reply) =/= disk_log_stopped ->
erlang:demonitor(Ref),
receive
{'DOWN', Ref, process, Pid, _Reason} ->
diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl
index c7d39dfd5d..10ab3e4370 100644
--- a/lib/kernel/test/code_SUITE.erl
+++ b/lib/kernel/test/code_SUITE.erl
@@ -81,6 +81,13 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
Config.
+init_per_testcase(big_boot_embedded, Config) ->
+ case catch crypto:start() of
+ ok ->
+ init_per_testcase(do_big_boot_embedded, Config);
+ _Else ->
+ {skip, "Needs crypto!"}
+ end;
init_per_testcase(_Func, Config) ->
Dog=?t:timetrap(?t:minutes(5)),
P=code:get_path(),
@@ -573,11 +580,13 @@ add_del_path(Config) when is_list(Config) ->
clash(Config) when is_list(Config) ->
DDir = ?config(data_dir,Config)++"clash/",
P = code:get_path(),
+ [TestServerPath|_] = [Path || Path <- code:get_path(),
+ re:run(Path,"test_server/?$",[]) /= nomatch],
%% test non-clashing entries
- %% remove "." to prevent clash with test-server path
- ?line true = code:del_path("."),
+ %% remove TestServerPath to prevent clash with test-server path
+ ?line true = code:del_path(TestServerPath),
?line true = code:add_path(DDir++"foobar-0.1/ebin"),
?line true = code:add_path(DDir++"zork-0.8/ebin"),
test_server:capture_start(),
@@ -589,8 +598,8 @@ clash(Config) when is_list(Config) ->
%% test clashing entries
- %% remove "." to prevent clash with test-server path
- ?line true = code:del_path("."),
+ %% remove TestServerPath to prevent clash with test-server path
+ ?line true = code:del_path(TestServerPath),
?line true = code:add_path(DDir++"foobar-0.1/ebin"),
?line true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"),
test_server:capture_start(),
@@ -603,9 +612,9 @@ clash(Config) when is_list(Config) ->
%% test "Bad path can't read"
- %% remove "." to prevent clash with test-server path
+ %% remove TestServerPath to prevent clash with test-server path
Priv = ?config(priv_dir, Config),
- ?line true = code:del_path("."),
+ ?line true = code:del_path(TestServerPath),
TmpEzFile = Priv++"foobar-0.tmp.ez",
?line {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile),
?line true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"),
diff --git a/lib/kernel/test/disk_log_SUITE.erl b/lib/kernel/test/disk_log_SUITE.erl
index ee1e2319b5..ad987fe7a7 100644
--- a/lib/kernel/test/disk_log_SUITE.erl
+++ b/lib/kernel/test/disk_log_SUITE.erl
@@ -1831,11 +1831,16 @@ block_queue2(Conf) when is_list(Conf) ->
%% Asynchronous stuff is ignored.
?line ok = disk_log:balog_terms(n, [<<"foo">>,<<"bar">>]),
?line ok = disk_log:balog_terms(n, [<<"more">>,<<"terms">>]),
+ Parent = self(),
?line Fun =
- fun() -> {error,disk_log_stopped} = disk_log:sync(n)
+ fun() ->
+ {error,no_such_log} = disk_log:sync(n),
+ receive {disk_log, _, {error, disk_log_stopped}} -> ok end,
+ Parent ! disk_log_stopped_ok
end,
?line spawn(Fun),
?line ok = sync_do(Pid, close),
+ ?line receive disk_log_stopped_ok -> ok end,
?line sync_do(Pid, terminate),
?line {ok,<<>>} = file:read_file(File ++ ".1"),
?line del(File, No),
@@ -2708,7 +2713,7 @@ error_log(Conf) when is_list(Conf) ->
% reopen (rename) fails, the log is terminated, ./File.2/ exists
?line {ok, n} = disk_log:open([{name, n}, {file, File}, {type, halt},
{format, external},{size, 100000}]),
- ?line {error, eisdir} = disk_log:reopen(n, LDir),
+ ?line {error, {file_error, _, eisdir}} = disk_log:reopen(n, LDir),
?line true = (P0 == pps()),
?line file:delete(File),
@@ -2719,7 +2724,7 @@ error_log(Conf) when is_list(Conf) ->
?line {ok, n} = disk_log:open([{name, n}, {file, File2}, {type, wrap},
{format, external},{size, {100, No}}]),
?line ok = disk_log:blog_terms(n, [B,B,B]),
- ?line {error, eisdir} = disk_log:reopen(n, File),
+ ?line {error, {file_error, _, eisdir}} = disk_log:reopen(n, File),
?line {error, no_such_log} = disk_log:close(n),
?line del(File2, No),
?line del(File, No),
diff --git a/lib/kernel/test/gen_sctp_SUITE.erl b/lib/kernel/test/gen_sctp_SUITE.erl
index 03e734445c..1b534a5fc4 100644
--- a/lib/kernel/test/gen_sctp_SUITE.erl
+++ b/lib/kernel/test/gen_sctp_SUITE.erl
@@ -212,7 +212,9 @@ xfer_active(Config) when is_list(Config) ->
?line test_server:fail({unexpected,flush()})
end,
?line io:format("SbAssocId=~p~n", [SbAssocId]),
- ?line ok = gen_sctp:send(Sa, SaAssocId, 0, Data),
+ ?line ok =
+ do_from_other_process(
+ fun () -> gen_sctp:send(Sa, SaAssocId, 0, Data) end),
?line receive
{sctp,Sb,Loopback,Pa,
{[#sctp_sndrcvinfo{stream=Stream,
@@ -378,11 +380,14 @@ def_sndrcvinfo(Config) when is_list(Config) ->
end
end,
?line ok =
- gen_sctp:send(
- S2,
- #sctp_sndrcvinfo{stream=0, ppid=20, assoc_id=S2AssocId},
- <<"4: ",Data/binary>>),
- ?line case ok(gen_sctp:recv(S1)) of
+ do_from_other_process(
+ fun () ->
+ gen_sctp:send(
+ S2,
+ #sctp_sndrcvinfo{stream=0, ppid=20, assoc_id=S2AssocId},
+ <<"4: ",Data/binary>>)
+ end),
+ ?line case ok(do_from_other_process(fun() -> gen_sctp:recv(S1) end)) of
{Loopback,P2,
[#sctp_sndrcvinfo{
stream=0, ppid=20, context=0, assoc_id=S1AssocId}],
@@ -575,6 +580,8 @@ api_opts(doc) ->
api_opts(suite) ->
[];
api_opts(Config) when is_list(Config) ->
+ ?line Sndbuf = 32768,
+ ?line Recbuf = 65536,
?line {ok,S} = gen_sctp:open(0),
?line OSType = os:type(),
?line case {inet:setopts(S, [{linger,{true,2}}]),OSType} of
@@ -582,7 +589,15 @@ api_opts(Config) when is_list(Config) ->
ok;
{{error,einval},{unix,sunos}} ->
ok
- end.
+ end,
+ ?line ok = inet:setopts(S, [{sndbuf,Sndbuf}]),
+ ?line ok = inet:setopts(S, [{recbuf,Recbuf}]),
+ ?line case inet:getopts(S, [sndbuf]) of
+ {ok,[{sndbuf,SB}]} when SB >= Sndbuf -> ok
+ end,
+ ?line case inet:getopts(S, [recbuf]) of
+ {ok,[{recbuf,RB}]} when RB >= Recbuf -> ok
+ end.
implicit_inet6(Config) when is_list(Config) ->
?line Hostname = ok(inet:gethostname()),
@@ -638,3 +653,31 @@ implicit_inet6(S1, Addr) ->
{{0,0,0,0,0,0,0,0},P2} -> ok
end,
?line ok = gen_sctp:close(S2).
+
+
+
+do_from_other_process(Fun) ->
+ Parent = self(),
+ Ref = make_ref(),
+ Child =
+ spawn(fun () ->
+ try Fun() of
+ Result ->
+ Parent ! {Ref,Result}
+ catch
+ Class:Reason ->
+ Stacktrace = erlang:get_stacktrace(),
+ Parent ! {Ref,Class,Reason,Stacktrace}
+ end
+ end),
+ Mref = erlang:monitor(process, Child),
+ receive
+ {Ref,Result} ->
+ receive {'DOWN',Mref,_,_,_} -> Result end;
+ {Ref,Class,Reason,Stacktrace} ->
+ receive {'DOWN',Mref,_,_,_} ->
+ erlang:raise(Class, Reason, Stacktrace)
+ end;
+ {'DOWN',Mref,_,_,Reason} ->
+ erlang:exit(Reason)
+ end.
diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl
index 1bb173a3ac..aaa20b7398 100644
--- a/lib/kernel/test/inet_SUITE.erl
+++ b/lib/kernel/test/inet_SUITE.erl
@@ -294,7 +294,7 @@ t_getaddr_v6(Config) when is_list(Config) ->
?line {Name,FullName,IPStr,_IP,_,IP_46_Str,IP46} =
ct:get_config(test_host_ipv4_only),
case {inet:getaddr(IP_46_Str, inet6),inet:getaddr(Name, inet6)} of
- {{ok,IP46},{ok,_}} ->
+ {{ok,IP46},{ok,V4Addr}} when V4Addr /= {0,0,0,0,0,0,0,1} ->
%% Since we suceeded in parsing an IPv6 address string and
%% look up the name, this computer fully supports IPv6.
?line {ok,IP46} = inet:getaddr(IP46, inet6),
diff --git a/lib/kernel/test/inet_res_SUITE.erl b/lib/kernel/test/inet_res_SUITE.erl
index 6064a9b2d9..8a3d220e46 100644
--- a/lib/kernel/test/inet_res_SUITE.erl
+++ b/lib/kernel/test/inet_res_SUITE.erl
@@ -117,9 +117,15 @@ ns_init(ZoneDir, PrivDir, DataDir) ->
case os:type() of
{unix,_} when ZoneDir =:= undefined -> undefined;
{unix,_} ->
- {ok,S} = gen_udp:open(0, [{reuseaddr,true}]),
- {ok,PortNum} = inet:port(S),
- gen_udp:close(S),
+ PortNum = case {os:type(),os:version()} of
+ {{unix,solaris},{M,V,_}} when M =< 5, V < 10 ->
+ 11895 + random:uniform(100);
+ _ ->
+ {ok,S} = gen_udp:open(0, [{reuseaddr,true}]),
+ {ok,PNum} = inet:port(S),
+ gen_udp:close(S),
+ PNum
+ end,
RunNamed = filename:join(DataDir, ?RUN_NAMED),
NS = {{127,0,0,1},PortNum},
P = erlang:open_port({spawn_executable,RunNamed},
diff --git a/lib/kernel/test/inet_res_SUITE_data/run-named b/lib/kernel/test/inet_res_SUITE_data/run-named
index b418607d48..7caa3756ef 100755
--- a/lib/kernel/test/inet_res_SUITE_data/run-named
+++ b/lib/kernel/test/inet_res_SUITE_data/run-named
@@ -2,7 +2,7 @@
##
## %CopyrightBegin%
##
-## Copyright Ericsson AB 2009. All Rights Reserved.
+## Copyright Ericsson AB 2009-2011. All Rights Reserved.
##
## The contents of this file are subject to the Erlang Public License,
## Version 1.1, (the "License"); you may not use this file except in
@@ -155,7 +155,7 @@ $NAMED $NAMED_FG -c "$CONF_FILE" >"$LOG_FILE" 2>&1 </dev/null &
NAMED=$!
trap "kill -TERM $NAMED >/dev/null 2>&1; wait $NAMED >/dev/null 2>&1" \
0 1 2 3 15
-sleep 1 # Give name server time to load its zone files
+sleep 2 # Give name server time to load its zone files
echo "Running: Enter \`\`quit'' to terminate nameserver[$NAMED]..."
while read LINE; do
test :"$LINE" = :'quit' && break