OTP R9C-1 has been released
Bjorn Gustavsson
bjorn@REDACTED
Wed May 26 15:33:30 CEST 2004
Bug fix release : otp_src_R9C-1
Build from snapshot : 2004-05-26
This is a bug fix release 1 for the R9C release.
You can download the full source distribution from
http://www.erlang.org/download/otp_src_R9C-1.tar.gz
http://www.erlang.org/download/otp_src_R9C-1.readme (this file)
If you have access to the Ericsson intranet you can find the same files at
http://erlang.ericsson.se/opensource/download/
Note: To unpack the TAR archive you need a GNU TAR compatible
program. For instance, on MacOS X you need to use the 'gnutar' command;
you can't use the 'tar' command or StuffIt to unpack the sources.
For installation instructions please read the README that is part of
the distribution.
The Windows binary distribution can be downloaded from
http://www.erlang.org/download/otp_win32_R9C-1.exe
The documentation at http://www.erlang.org will be updated. You can
also download the complete HTML documentation or the Unix manual files
http://www.erlang.org/download/otp_html_R9C-1.tar.gz
http://www.erlang.org/download/otp_man_R9C-1.tar.gz
For some OTP applications there are more detailed release notes in the
HTML documentation.
We also want to thank those that sent us patches, suggestions and bug
reports,
The OTP Team
--- asn1 ------------------------------------------------------------
Fixed errors and malfunctions:
OTP-4832 Functionality to handle parameterized object sets have
been added.
OTP-4833 Bug causing duplicated fuction definitions using exclusive
decode is removed.
OTP-4835 The race condition when loading asn1 driver is solved.
OTP-4773 ObjectDescriptor does now work as part of a sequence, set
or choice.
OTP-4791 When a SEQUENCE that have extension mark was decoded inside
a SEQUENCE OF it could cause decode error due to a failure
in restbytes2. It is now corrected.
OTP-4792 Now the bug is fixed that caused the compiler crash on an
untaged optional open type.
OTP-4797 The earlier exit caused by bad indata is now fixed so it
will return an {error,Reason} tuple.
OTP-4798 Open type encoded with indefinite length is now correct
decoded.
OTP-4799 Now is absent optional open types handled correctly.
OTP-4809 Now is the necessary functions available for sorting in
run-time of SET and SET OF components.
Improvements and new features:
OTP-4856 A specialized decode, selective decode is now available.
It decodes a chosen internal sub-type of a constructed type.
OTP-4866 The {internal_error,...,{ unrecognized_type,...}} error
occuring for a SET type when compiling with options
[ber_bin,optimize,der] is now corrected.
OTP-4869 False encode of BIT STRING in PER (per_bin,optimize) is
fixed. The error occured when there was a type like
BIT STRING (SIZE(C)) and C > 16.
Fixed errors and malfunctions:
OTP-4893 Functionality for parameterized class is added. Parsing
failures on WithSyntax spec is corrected.
OTP-4894 The failure due to Parameterized Type when parameter is an
object set is corrected.
OTP-4895 Object Identifier values with two components and teh first
was a value reference failed due to parsing conflicts.
Now it is corrected.
OTP-4944 The errorounus comparison of file name and asn1 module name
could cause compilation failure. It is now fixed.
OTP-4953 Selective decode was ignored when exclusive decode spec in
asn1 configfile was missing. Selective decode failed when
the selected type was the top type.
These bugs are now removed.
OTP-4955 The test interface asn1ct:test/1,2,3 and asn1ct:value/2
failed for open type and EXTERNAL. The bug is now removed.
OTP-4957 Two equal functions were generated for two components
referencing the same type when they were picked by the
action "parts". The bug is now fixed.
Improvements and new features:
OTP-4917 INTEGER with named number list and ENUMERATED can now be sub
constrained with names from the names list.
OTP-4918 Now there is support for SelectionType (X 680 section 29)
OTP-4919 The compiler now resolves circular dependencies. When asn1
specs IMPORTS from each other so that there are circular
dependencies.
OTP-4965 Now is the asn1 type UTF8String supported. For user
instructions see documentation.
OTP-5022 An error due to unchecked referenced imported
type resulted in missing tag in some table
constraint cases. This error is now corrected.
Error occured during decode in ber_bin optimized version.
--- compiler ------------------------------------------------------------
OTP-4790 In rare circumstances, the compiler could optimize away a test
that would verify that a tuple or record argument indeed was
of the correct type (resulting in an emulator crash if the
argument was not of the correct type/size). Wrong code could
also be generated for floating point expressions.
OTP-4960 Compilation of modules with long strings could be extremely
slow.
OTP-4961 In bit syntax matching with clauses having guards, sometimes
the subsequent clauses would never match if a guard was
evaluated (and failed).
OTP-4962 In (Expr)#rec{a=A,b=B}, Expr would be evaluated more than
once.
OTP-5050 The compiler could generate incorrect code for
receive clauses did not use the message in any
way, for instance if a guard would ignore message
depending on some condition not based on the
contents of the message (e.g. a state variable
in the "loop data").
--- cosNotification ------------------------------------------------------------
OTP-4976 The app-files contained duplicated modules.
--- cosProperty ------------------------------------------------------------
OTP-4976 The app-files contained duplicated modules.
--- debugger ------------------------------------------------------------
OTP-4837 Problem with varying font size in trace window fixed.
OTP-4839 File name for where to find documentation ('Help' button) is
now correct.
OTP-4842 If GS was unavailable, debugger:start() hanged.
Now a tuple {error,Reason} is returned instead.
OTP-4845 Several issues fixed, matching binaries could crash,
exit/throw handling could hang and calling fun's could crash.
OTP-4859 The debugger could not load code with some guard tests.
OTP-4868 Problem with unreadable font on platforms where 'screen' is
not available, is now fixed. 'Courier' is chosen instead.
--- erl_interface ------------------------------------------------------------
OTP-4777 erl_call -a parsed erlang terms incorrectly due to a bug in
ei_format, which is now corrected.
OTP-4865 Strings longer than 65535 bytes were encoded wrong in
ei/erl_interface.
OTP-4804 The undocumented possibility to use res_gethostbyname instead
of the supported gethostbyname call to resolve hostnames on
solaris is removed, as it caused dependency on the resolv
library. As to our knowlege, noone has ever used that
undocumented feature.
OTP-4874 Some undocumented functions where removed from the header
files and/or renamed in R9C breaking backward compatibility.
The following functions previously undocumented are now
documented and defined in the header files
erl_gethostbyname() erl_gethostbyname_r() erl_gethostbyaddr()
erl_gethostbyname_r() ei_gethostbyname() ei_gethostbyname_r()
ei_gethostbyaddr() ei_gethostbyname_r()
Some "ei_x" variants missing for the encoding functions were
also added
ei_x_encode_boolean() ei_x_encode_char() ei_x_encode_port()
ei_x_encode_ref() ei_x_encode_trace()
A bug in ei_connect_init() was corrected where it may
incorrectly result in a long node name (bug introduced in
R9C).
A small optimization was done in ei_rpc_from() not to scan
unnecessary file descriptors.
Now all integer decoding functions can handle unexpected but
correct encodings according to the external format
specification (the emulator or erl_inteface will never create
these encodings).
Now ei_decode_ulong() returns -1 when decoding up to 28 bit
negative numbers.
ei_encode_atom() is documented to truncate the name to
MAXATOMLEN (256) characters. It now does.
ei_encode_string() will now encode the empty string the same
compact way the emulator does, as the empty list/nil [].
Several serious bugs in the signed and unsigned "long long"
encode and decode functions where corrected.
There where a potential problem on Solaris if the Solaris
linker was used. Even if no "long long" functions were used
in the user code the linkage could break because of the
dependency for some "long long" operations to "libgcc.a", an
gcc internal library.
OTP-4930 The vxworks PPC860 version of erl_interface is not supposed
to call *any* soft floating point routines in libgcc.a. That
was not the case after bignum's were introduced in
erl_interface. A bug in the decoding of bignums on little
endian machines is also removed.
OTP-4874 Some undocumented functions where removed from the header
files and/or renamed in R9C breaking backward compatibility.
The following functions previously undocumented are now
documented and defined in the header files
erl_gethostbyname() erl_gethostbyname_r() erl_gethostbyaddr()
erl_gethostbyname_r() ei_gethostbyname() ei_gethostbyname_r()
ei_gethostbyaddr() ei_gethostbyname_r()
Some "ei_x" variants missing for the encoding functions were
also added
ei_x_encode_boolean() ei_x_encode_char() ei_x_encode_port()
ei_x_encode_ref() ei_x_encode_trace()
A bug in ei_connect_init() was corrected where it may
incorrectly result in a long node name (bug introduced in
R9C).
A small optimization was done in ei_rpc_from() not to scan
unnecessary file descriptors.
Now all integer decoding functions can handle unexpected but
correct encodings according to the external format
specification (the emulator or erl_inteface will never create
these encodings).
Now ei_decode_ulong() returns -1 when decoding up to 28 bit
negative numbers.
ei_encode_atom() is documented to truncate the name to
MAXATOMLEN (256) characters. It now does.
ei_encode_string() will now encode the empty string the same
compact way the emulator does, as the empty list/nil [].
Several serious bugs in the signed and unsigned "long long"
encode and decode functions where corrected.
There where a potential problem on Solaris if the Solaris
linker was used. Even if no "long long" functions were used
in the user code the linkage could break because of the
dependency for some "long long" operations to "libgcc.a", an
gcc internal library.
OTP-4874 Some undocumented functions where removed from the header
files and/or renamed in R9C breaking backward compatibility.
The following functions previously undocumented are now
documented and defined in the header files
erl_gethostbyname() erl_gethostbyname_r() erl_gethostbyaddr()
erl_gethostbyname_r() ei_gethostbyname() ei_gethostbyname_r()
ei_gethostbyaddr() ei_gethostbyname_r()
Some "ei_x" variants missing for the encoding functions were
also added
ei_x_encode_boolean() ei_x_encode_char() ei_x_encode_port()
ei_x_encode_ref() ei_x_encode_trace()
A bug in ei_connect_init() was corrected where it may
incorrectly result in a long node name (bug introduced in
R9C).
A small optimization was done in ei_rpc_from() not to scan
unnecessary file descriptors.
Now all integer decoding functions can handle unexpected but
correct encodings according to the external format
specification (the emulator or erl_inteface will never create
these encodings).
Now ei_decode_ulong() returns -1 when decoding up to 28 bit
negative numbers.
ei_encode_atom() is documented to truncate the name to
MAXATOMLEN (256) characters. It now does.
ei_encode_string() will now encode the empty string the same
compact way the emulator does, as the empty list/nil [].
Several serious bugs in the signed and unsigned "long long"
encode and decode functions where corrected.
There where a potential problem on Solaris if the Solaris
linker was used. Even if no "long long" functions were used
in the user code the linkage could break because of the
dependency for some "long long" operations to "libgcc.a", an
gcc internal library.
OTP-4995 Corrections for mistakes done for patch erl_605/OTP-4874.
--- erts ------------------------------------------------------------
OTP-4787 A bug in erl_scan caused the compiler to hang when
end-of-file in a comment was encountered. This is now
corrected.
OTP-4831 The linter now reports errors for unsafe variables when the
option <c>nowarn_unused_vars</c> is given.
OTP-4844 <p><code>gen_server:cast/2</code> now crashes for invalid
arguments.
<p><code>gen_server:abcast/2-3</code> now crashes for
invalid arguments. The behaviour when casting to the name
<code>global</code> has been corrected. Previously,
<code>gen_server:abcast(global,[node@REDACTED])</code> tried to
cast to the globally registered name <code>node@REDACTED</code>,
which is more of a bug than less. Now such a call will cast
to the registered name <code>global</code> at the node
<code>node@REDACTED</code> as (probably) expected.
<p>An <code>rpc:call/5</code> and
<code>rpc:block_call/5</code> having a timeout argument has
been added. <p><code>rpc:abcast/2-3</code> has been improved
not to get stuck waiting for connection setup if the remote
node is not connected. In this case the send is spawned off
to a temporary process.
OTP-4846 The boot server had become broken. Now it works again.
OTP-4855 When loading a dynamically linked in driver through
erl_ddll, the server ddll_server that held the port for the
driver handling shared libraries got the group leader of the
invoking application. Later, when the application was
terminated, it killed all processes in its group, also the
ddll_server, so the driver still had some shared libraries
loaded. Finally, when the ddll_server was restarted it
assumed that all shared libraries its driver knew of was
statically linked, so the dynamically linked in drivers that
was loaded when ddll_server was killed could neither be
loaded nor unloaded. This bug has now been fixed by setting
the group leader of ddll_server to something harmless and
more eternal, and by unloading all remaining dynamically
linked in drivers when ddll_server starts. A race condition
when starting ddll_server has also been fixed.
OTP-4818 The f/1 shell command did not work correctly with
restricted shell.
OTP-4838 The elib_malloc alternative dynamic memory allocator has been
improved to use an address order best fit strategy. The
instrumented emulator has been improved to be able to catch
memory allocations done by external libraries. The emulator
flag '+r' (stands for "relocate") makes ets updates always
result in an object relocation, which significantly lessens
the memory fragmentation in certain systems. The
erlang:system_info/1 bif can now be called with the argument
'ets_realloc_moves' and will return true if the '+r' emulator
flag is in effect, false otherwise.
OTP-4876 The driver for dynamically linked in drivers has been fixed
to delete loaded drivers when its erlang server dies. The
erlang server has also been updated to improve the
start-on-demand behaviour.
OTP-4890 The shell function c:regs() did crash if there was a
registered port among the registered names. This is now
corrected.
OTP-4892 erlang:register/2 does no longer generate an ERROR
REPORT to the error logger when the name already is
registered. If the name is already registered the process
function will crash with {'EXIT',Reason} and that is enough.
It is up to the caller to decide if it is an error that the
name is already registered.
OTP-4897 Starting Erlang with the +Bi flag (to ignore ^C), now also
disables the quit ('q') option in the JCL menu.
OTP-4898 A stdlib application variable, shell_esc, has been
introduced that controls the behaviour of ^G. If
shell_esc is set to abort, ^G restarts the
shell. If set to jcl, ^G invokes the JCL menu. The
latter is default.
OTP-4903 When using erlang:system_monitor(Pid,{long_gc,Time}), and the
GC time exceeded 1 second, it sometimes erroneously showed up
as about 4300 seconds. This bug has now been corrected.
OTP-4906 A bug has been fixed in Dets: not all objects were
always visible in tables with more than 131072 keys
OTP-4907 A bug has been fixed in Dets: when trying to repair a
version 9 table, a not_a_dets_file error message was
returned unnecessarily often.
OTP-4916 A possibility to make distribution messages be qued up during
running of erlang code, so that larger packages is sent over
the network is added.
OTP-4925 When code loading failed it was impossible to know exactly
what caused it, only {undef,[M,F,A],...} would be reported.
Now error_logger:warning_report/1 is called by the primitive
loader if a file operation fails. All file errors except
enoent and enotdir are reported this way.
OTP-4914 Distributed monitoring in combination with nodes restarting
did not behave correctly in rare circumstances.
OTP-4952 If a gen_server, gen_event or gen_fsm process exits with
{undef,[{M,F,A}|...]}, the error report will now state if the
function call failed because the module could not be loaded
or because the function was not exported.
OTP-4963 A module containing code similar to 'receive after 4.1' could
not be loaded.
OTP-4979 The Solaris kernel poll feature was changed from a compile
time option to a runtime option. The kernel poll feature can
be enabled, by passing the command-line argument "+K true" to
an emulator (see erl(1)) that have kernel poll support, i.e.
an emulator for Solaris 8. By default the kernel poll feature
is disabled.
OTP-4985 Before the Erlang emulator writes an erl_crash.dump file (for
any reason), it will close all open files and sockets.
OTP-4986 The '+c' switch has been added to disable time correction in
the runtime system, this should be used on systems where one
is certain no dramatic wall clock time changes will occur and
the time correction algorithm is too costly (namely very fast
Linux systems where loads of erlang:now() are executed).
OTP-4989 When opening a Dets table read only an attempt was made to
re-hash the table resulting in an error message. This problem
has been fixed.
OTP-4991 The process_flag/2,3 BIFs now take a flag min_heap_size that
allows changing an existing process's minimum heap size. The
actual size will only be changed when the next garbage
collection occurs.
OTP-4992 Problems fixed in file:open/2: "/dev/null" can now be opened.
Opening a FIFO will now return an error instead of hanging
the emulator. The documentation has been updated to point out
that file:open/2 returns the error code <c>eisdir</c> when
the pathname is not a regular file (the pathname is not
necesserarily a directory).
OTP-5026 Conversion of extremely small floating point numbers in the
external format (distribution) could sometimes fail leading
to unexpected closing of distribution channels, i.e.
generating nodedowns for healthy nodes.
OTP-5028 Emulator with elib_malloc enabled could hang when many I/O
threads were in use.
OTP-5030 Remote spawn on a nonreachable node now gives warning instead
of error in the error_log.
OTP-4789 A few portability enhancements for the R9C-1 Open Source
release: The installer for Windows can now be built with NSIS
2.0 (as well as with the NSIS 2.0b3). The driver header files
updated to allowed drivers to be built wich the MinGW
compiler on Windows. Minor portability enhancement in
io_lib:fread.
OTP-5026 Conversion of extremely small floating point numbers in the
external format (distribution) could sometimes fail leading
to unexpected closing of distribution channels, i.e.
generating nodedowns for healthy nodes.
--- ic ------------------------------------------------------------
OTP-4763 Output of Java long was truncated to 32 bits. IDL long long
and unsigned long long could not be used in a struct for the
Java backend. All unsigned integer types for the Java backend
had broken marshalling for large values. These bugs has now
been fixed.
OTP-4763 Output of Java long was truncated to 32 bits. IDL long long
and unsigned long long could not be used in a struct for the
Java backend. All unsigned integer types for the Java backend
had broken marshalling for large values. These bugs has now
been fixed.
OTP-4881 In generated code for the C server back-end, the naming
scope was in error for prototypes in C header files for
interfaces inheriting base interfaces.
Improvements and new features:
OTP-4972 Send and receive functions with timeouts have been added
to the C back-ends for the standard protocol (i.e. Erlang
distribution + gen_server protocol).
Accordingly a new compiler option {c_timeout,
{SendTimeout, RecvTimeout}} has been added. Timeouts are
specified in milliseconds.
A user that want to implement its own protocols with
function timeouts has to implement the following functions.
For C clients the functions int
PFX_send_notification(CORBA_Environment *env, unsigned int
send_ms), and int
PFX_send_request_and_receive_reply(CORBA_Environment *env,
unsigned int send_ms, unsigned int recv_ms) have to be
additionally implemented, where PFX is the user defined
prefix.
For C servers no additional functions have to be
implemented, but a clone of the int
oe_server_receive_tmo(CORBA_Environment *env, oe_map_t *map,
unsigned int send_ms, unsigned int recv_ms) might be
handy.
OTP-4834 The C back-ends has been opened up, so that a user can
define his own protocol, differing from the Erlang
distribution + gen_server protocol.
For C clients it means to replace the library functions int
oe_prepare_notification_encoding(CORBA_Environment *env),
int oe_send_notification(CORBA_Environment *env), int
oe_prepare_request_encoding(CORBA_Environment *env), int
oe_send_request_and_receive_reply(CORBA_Environment *env),
and int oe_prepare_reply_decoding(CORBA_Environment *env),
with functions of the same signature, but with the
prefix "oe" replaced by a user defined prefix.
For C servers the functions int
oe_prepare_request_decoding(CORBA_Environment *env), and int
oe_prepare_reply_encoding(CORBA_Environment *env),
are similarly replaced.
The new compiler option {user_protocol, Prefix} has
been added.
Improvements and new features:
OTP-4972 Send and receive functions with timeouts have been added
to the C back-ends for the standard protocol (i.e. Erlang
distribution + gen_server protocol).
Accordingly a new compiler option {c_timeout,
{SendTimeout, RecvTimeout}} has been added. Timeouts are
specified in milliseconds.
A user that want to implement its own protocols with
function timeouts has to implement the following functions.
For C clients the functions int
PFX_send_notification(CORBA_Environment *env, unsigned int
send_ms), and int
PFX_send_request_and_receive_reply(CORBA_Environment *env,
unsigned int send_ms, unsigned int recv_ms) have to be
additionally implemented, where PFX is the user defined
prefix.
For C servers no additional functions have to be
implemented, but a clone of the int
oe_server_receive_tmo(CORBA_Environment *env, oe_map_t *map,
unsigned int send_ms, unsigned int recv_ms) might be
handy.
OTP-4834 The C back-ends has been opened up, so that a user can
define his own protocol, differing from the Erlang
distribution + gen_server protocol.
For C clients it means to replace the library functions int
oe_prepare_notification_encoding(CORBA_Environment *env),
int oe_send_notification(CORBA_Environment *env), int
oe_prepare_request_encoding(CORBA_Environment *env), int
oe_send_request_and_receive_reply(CORBA_Environment *env),
and int oe_prepare_reply_decoding(CORBA_Environment *env),
with functions of the same signature, but with the
prefix "oe" replaced by a user defined prefix.
For C servers the functions int
oe_prepare_request_decoding(CORBA_Environment *env), and int
oe_prepare_reply_encoding(CORBA_Environment *env),
are similarly replaced.
The new compiler option {user_protocol, Prefix} has
been added.
Improvements and new features:
OTP-4972 Send and receive functions with timeouts have been added
to the C back-ends for the standard protocol (i.e. Erlang
distribution + gen_server protocol).
Accordingly a new compiler option {c_timeout,
{SendTimeout, RecvTimeout}} has been added. Timeouts are
specified in milliseconds.
A user that want to implement its own protocols with
function timeouts has to implement the following functions.
For C clients the functions int
PFX_send_notification(CORBA_Environment *env, unsigned int
send_ms), and int
PFX_send_request_and_receive_reply(CORBA_Environment *env,
unsigned int send_ms, unsigned int recv_ms) have to be
additionally implemented, where PFX is the user defined
prefix.
For C servers no additional functions have to be
implemented, but a clone of the int
oe_server_receive_tmo(CORBA_Environment *env, oe_map_t *map,
unsigned int send_ms, unsigned int recv_ms) might be
handy.
OTP-4834 The C back-ends has been opened up, so that a user can
define his own protocol, differing from the Erlang
distribution + gen_server protocol.
For C clients it means to replace the library functions int
oe_prepare_notification_encoding(CORBA_Environment *env),
int oe_send_notification(CORBA_Environment *env), int
oe_prepare_request_encoding(CORBA_Environment *env), int
oe_send_request_and_receive_reply(CORBA_Environment *env),
and int oe_prepare_reply_decoding(CORBA_Environment *env),
with functions of the same signature, but with the
prefix "oe" replaced by a user defined prefix.
For C servers the functions int
oe_prepare_request_decoding(CORBA_Environment *env), and int
oe_prepare_reply_encoding(CORBA_Environment *env),
are similarly replaced.
The new compiler option {user_protocol, Prefix} has
been added.
Improvements and new features:
OTP-5036 The size of modules, used then registering data in the IFR DB
(e.g., oe_MyModule:oe_register()), can be minimized if the
compile option light_ifr is used and Orber is configured to
use Light IFR. Requires that orber-3.5, or later, is used.
Incompatibilities:
OTP-5049 The compile otion multiple_be is no longer supported.
--- inets ------------------------------------------------------------
OTP-4822 [ftp] FTP client doesn't notice when disk is full.
OTP-4808 [httpd] In module mod_browser, malformed search for
parsed header, user-agent. Also added new os and
browser.
OTP-4807 [httpc] HTTP client reformats some URLs (e.g.
containing %20, space). Updated client from
sowap.sf.net as of 2003-09-08.
Johan Blom of Mobile Arts AB
OTP-4806 [httpd] Fixed a number of transfer-encoding problems.
First part of the data received from a CGI-script was
sent as chunked even if the client was HTTP/1.0.
Introduced new directive
(DisableChunkedTransferEncodingSend) to turn off usage
of chunked transfer-encoding (when sending) since it
appears some browsers have problems handling this.
This applies if the client is HTTP/1.1.
--- jinterface ------------------------------------------------------------
OTP-4763 Output of Java long was truncated to 32 bits. IDL long long
and unsigned long long could not be used in a struct for the
Java backend. All unsigned integer types for the Java backend
had broken marshalling for large values. These bugs has now
been fixed.
OTP-4763 Output of Java long was truncated to 32 bits. IDL long long
and unsigned long long could not be used in a struct for the
Java backend. All unsigned integer types for the Java backend
had broken marshalling for large values. These bugs has now
been fixed.
--- kernel ------------------------------------------------------------
OTP-4788 When the emulator was started with command line arguments
-run or -s and the started code did an uncatched
erlang:throw/1, the emulator ignored the throw which is
rather strange. Now the init process exits with nocatch as
expected.
OTP-4802 The code server could hang if invoked early in the startup.
For example if the emulator was started with "-s file eval
Filename" and Filename contained a call to code:add_patha/1
the code server accidentally tried to execute code in an
unloaded module from inside the code that loaded a module -
hence hangup. This bug has now been fixed.
OTP-4787 A bug in erl_scan caused the compiler to hang when
end-of-file in a comment was encountered. This is now
corrected.
OTP-4831 The linter now reports errors for unsafe variables when the
option <c>nowarn_unused_vars</c> is given.
OTP-4844 <p><code>gen_server:cast/2</code> now crashes for invalid
arguments.
<p><code>gen_server:abcast/2-3</code> now crashes for
invalid arguments. The behaviour when casting to the name
<code>global</code> has been corrected. Previously,
<code>gen_server:abcast(global,[node@REDACTED])</code> tried to
cast to the globally registered name <code>node@REDACTED</code>,
which is more of a bug than less. Now such a call will cast
to the registered name <code>global</code> at the node
<code>node@REDACTED</code> as (probably) expected.
<p>An <code>rpc:call/5</code> and
<code>rpc:block_call/5</code> having a timeout argument has
been added. <p><code>rpc:abcast/2-3</code> has been improved
not to get stuck waiting for connection setup if the remote
node is not connected. In this case the send is spawned off
to a temporary process.
OTP-4846 The boot server had become broken. Now it works again.
OTP-4855 When loading a dynamically linked in driver through
erl_ddll, the server ddll_server that held the port for the
driver handling shared libraries got the group leader of the
invoking application. Later, when the application was
terminated, it killed all processes in its group, also the
ddll_server, so the driver still had some shared libraries
loaded. Finally, when the ddll_server was restarted it
assumed that all shared libraries its driver knew of was
statically linked, so the dynamically linked in drivers that
was loaded when ddll_server was killed could neither be
loaded nor unloaded. This bug has now been fixed by setting
the group leader of ddll_server to something harmless and
more eternal, and by unloading all remaining dynamically
linked in drivers when ddll_server starts. A race condition
when starting ddll_server has also been fixed.
OTP-4818 The f/1 shell command did not work correctly with
restricted shell.
OTP-4876 The driver for dynamically linked in drivers has been fixed
to delete loaded drivers when its erlang server dies. The
erlang server has also been updated to improve the
start-on-demand behaviour.
OTP-4890 The shell function c:regs() did crash if there was a
registered port among the registered names. This is now
corrected.
OTP-4892 erlang:register/2 does no longer generate an ERROR
REPORT to the error logger when the name already is
registered. If the name is already registered the process
function will crash with {'EXIT',Reason} and that is enough.
It is up to the caller to decide if it is an error that the
name is already registered.
OTP-4897 Starting Erlang with the +Bi flag (to ignore ^C), now also
disables the quit ('q') option in the JCL menu.
OTP-4898 A stdlib application variable, shell_esc, has been
introduced that controls the behaviour of ^G. If
shell_esc is set to abort, ^G restarts the
shell. If set to jcl, ^G invokes the JCL menu. The
latter is default.
OTP-4903 When using erlang:system_monitor(Pid,{long_gc,Time}), and the
GC time exceeded 1 second, it sometimes erroneously showed up
as about 4300 seconds. This bug has now been corrected.
OTP-4906 A bug has been fixed in Dets: not all objects were
always visible in tables with more than 131072 keys
OTP-4907 A bug has been fixed in Dets: when trying to repair a
version 9 table, a not_a_dets_file error message was
returned unnecessarily often.
OTP-4880 Bugs have been fixed in the disk_log module: if
reopen failed to rename a file, a message could
erroneously be sent to the client; if requests were queued
while a log was blocked, no replies were sent to the blocked
processes should the log be closed.
OTP-4902 In rare cases, the global name registration could hang during
simultaneous startup of several nodes, due to a cyclic
deadlock in the global:loop_the_locker processes.
OTP-4915 The kernel variable net_setuptime can now be defined in
fractions of seconds (using a floating point number)
OTP-4916 A possibility to make distribution messages be qued up during
running of erlang code, so that larger packages is sent over
the network is added.
OTP-4925 When code loading failed it was impossible to know exactly
what caused it, only {undef,[M,F,A],...} would be reported.
Now error_logger:warning_report/1 is called by the primitive
loader if a file operation fails. All file errors except
enoent and enotdir are reported this way.
OTP-4914 Distributed monitoring in combination with nodes restarting
did not behave correctly in rare circumstances.
OTP-4952 If a gen_server, gen_event or gen_fsm process exits with
{undef,[{M,F,A}|...]}, the error report will now state if the
function call failed because the module could not be loaded
or because the function was not exported.
OTP-4963 A module containing code similar to 'receive after 4.1' could
not be loaded.
OTP-4979 The Solaris kernel poll feature was changed from a compile
time option to a runtime option. The kernel poll feature can
be enabled, by passing the command-line argument "+K true" to
an emulator (see erl(1)) that have kernel poll support, i.e.
an emulator for Solaris 8. By default the kernel poll feature
is disabled.
OTP-4985 Before the Erlang emulator writes an erl_crash.dump file (for
any reason), it will close all open files and sockets.
OTP-4986 The '+c' switch has been added to disable time correction in
the runtime system, this should be used on systems where one
is certain no dramatic wall clock time changes will occur and
the time correction algorithm is too costly (namely very fast
Linux systems where loads of erlang:now() are executed).
OTP-4989 When opening a Dets table read only an attempt was made to
re-hash the table resulting in an error message. This problem
has been fixed.
OTP-4991 The process_flag/2,3 BIFs now take a flag min_heap_size that
allows changing an existing process's minimum heap size. The
actual size will only be changed when the next garbage
collection occurs.
OTP-4992 Problems fixed in file:open/2: "/dev/null" can now be opened.
Opening a FIFO will now return an error instead of hanging
the emulator. The documentation has been updated to point out
that file:open/2 returns the error code <c>eisdir</c> when
the pathname is not a regular file (the pathname is not
necesserarily a directory).
OTP-5020 An error that made the code server ignore version numbers on
lib directories has been corrected.
OTP-5026 Conversion of extremely small floating point numbers in the
external format (distribution) could sometimes fail leading
to unexpected closing of distribution channels, i.e.
generating nodedowns for healthy nodes.
OTP-5028 Emulator with elib_malloc enabled could hang when many I/O
threads were in use.
OTP-5030 Remote spawn on a nonreachable node now gives warning instead
of error in the error_log.
OTP-4789 A few portability enhancements for the R9C-1 Open Source
release: The installer for Windows can now be built with NSIS
2.0 (as well as with the NSIS 2.0b3). The driver header files
updated to allowed drivers to be built wich the MinGW
compiler on Windows. Minor portability enhancement in
io_lib:fread.
OTP-5026 Conversion of extremely small floating point numbers in the
external format (distribution) could sometimes fail leading
to unexpected closing of distribution channels, i.e.
generating nodedowns for healthy nodes.
--- megaco ------------------------------------------------------------
OTP-4836 Update of the request timer incorrect when receiving a
pending message. Could cause an exit of the process
handling the message and a subsequent call to the
handle_disconnect callback function.
OTP-4843 Failed stopping the request timer when receiving a reply.
The only effect this had was that the request timer
possibly ran one extra time (without doing anything).
Fixed bugs and malfunctions:
OTP-4836 Update of the request timer incorrect when receiving a
pending message. Could cause an exit of the process
handling the message and a subsequent call to the
handle_disconnect callback function.
OTP-4843 Failed stopping the request timer when receiving a reply.
The only effect this had was that the request timer
possibly ran one extra time (without doing anything).
Improvements and new features:
- Support for both version 1 & 2 of the Megaco standard, updated
according with IGv10-13.
Version selection is described in chapter Handling megaco
versions 1 & 2.
- It is now possible to use the ASN.1 linked in driver for
decode/encode of messages (encoding config driver).
See chapter Configuration of binary encoding module(s).
- Added a new configuration parameter, orig_pending_limit, to support
the xOriginatingPendingLimit (x = MG or MGC) property in the root
package.
See the orig_pending_limit parameter of the user_info function
(also conn_info).
- Added a new configuration parameter, threaded. This tells the megaco
app, that all transaction requests in a message should be executed
in parallel (e.g. each in it's own process).
See the threaded parameter of the user_info function
(also conn_info).
- Added behaviour modules megaco_transport and megaco_encoder.
- Added new (message) test functions to the megaco module, see
test_request and test_reply.
- Minor improvements to the tracing.
- Minor improvements to the simple example.
Incompatibilities:
- signalsDescriptor has changed i v2.
- ServiceChangeProfile has changed in v2.
OTP-4920 Megaco did not handle IPv6-addresses.
OTP-4921 Text encoding of hex-digits sometimes incorrect.
Improvements and new features:
- Allow separatelly encode action requests. Handle sending of those
previously encoded action requests as binaries (as well as lists of
action requests).
See encode_actions, call and cast.
- Introduce a transaction sender process (one for each connection)
which will accumulate transactions and send several in one message.
See transaction sender, user_info and conn_info.
- New encoding-config options for the erl_dist encoder which makes it
possible to compress the megaco messages. This makes the erl_dist
encoded message much more compact (about 1/3 of the size).
See megaco_compressed.
Fixed bugs and malfunctions:
OTP-4974 Text parser(s) did not handle parsing of the StreamId field
of RequestedEvent and SecondRequestedEvent.
OTP-4956 Repeated transaction request receiving when exceeding
pending limit will cause the message handling process to
crash.
OTP-4950 Text parser did not handle auditReturnItem properly, as
defined in IGv11.
OTP-4949 Missing [text] servChgReplyParm constistency check.
OTP-4946 Incorrect handling of comments in text messages.
OTP-4945 Missing [text] serviceChangeParm constistency check.
Incompatibilities:
OTP-4950 Text parser did not handle auditReturnItem properly, as
defined in IGv11. The result which was supposed to have
been presented as the tuple:
{emptyDescriptor, #'AuditDescriptor{}}
in the termination audit list, was instead entered as
{auditReturnItem, atom()}
in the termination audit list. This has been fixed.
- In previous releases there where a couple of user and connection
config items dealing with accumulating transaction ack sending.
These has all been renamed due to the introduction of the
transaction sender.
See transaction sender, user_info and conn_info.
OTP-5025 During node restart in a high load senario, the
megaco_messenger:receive_reply_remote function could be
called on a node before the megaco app has actually been
started. This will result in a crash (EXIT with badarg). This
is now handled in the same way as if the request was not
found (with a call to the callback function
handle_unexpected_trans).
OTP-5042 A pretty text message containing an ObservedEvents without
timestamp, will fail to decode.
--- mnesia ------------------------------------------------------------
OTP-4803 Mnesia could deadlock if add_table_copy was called
during a node startup.
OTP-4863 Mnesia couldn't mix normal transactions and activities
(fragmented tables) in nested transactions.
OTP-4864 Mnesia copied to much data when connecting to an old
node, this could cause slow startup times.
OTP-4926 Fixed startup problems with ram based mnesia nodes,
multiple synchronization problems could cause mnesia
to either hang or crash.
OTP-4964 Mnesia's monitor process could crash with badarg or
badmatch in mnesia-4.1.8.
OTP-5012 Mnesia could crash if a cleartable operation
was made during startup of any node.
OTP-5013 Restarting mnesia (fast) could lead to
synchronization problems, leaving transactions unfinished.
OTP-5014 Mnesia could fail to load tables that only existed on
2 nodes and mnesia couldn't grab a lock on that table in 20 tries.
OTP-5039 Mnesia's internal state could be inconsistent between nodes
on ram-only systems. Data could be commited on nodes despite
that the lock was not grabbed on all nodes (that could happen
on all type of nodes).
--- orber ------------------------------------------------------------
OTP-4780 The operation orber:start() could return before all Mnesia
tables were accessible.
OTP-4781 Concurrent creation of non-anonymous IFR types could result
in duplicates in the DB.
OTP-4781 Due to IFR DB lock mechanisms, concurrent creation of
non-anonymous IFR types could still result in duplicated
entries.
Improvements and new features:
OTP-4698 It is now possible to configure Orber to use NAT
(Network Address Translation) friendly parameters.
A new section in the User's Guide describes how to
handle communication via firewalls.
OTP-4699 A new module called orber_diagnostics have been added,
which is intended to aid a user during the test and
development phase. For more information, see the
reference manual.
OTP-4937 IPv6 supported.
OTP-4938 Possible to configure Orber so that exported IOR:s
contain multiple IIOP components for different interfaces.
OTP-4939 Improved typechecking of typecode supplied to the
operations orber_tc:check_tc/1, any:create/2 and
any:set_typecode/2.
OTP-4940 Server objects can now be started as EXIT tolerant.
OTP-4941 Possible to use interceptors for local invocations as well.
OTP-5001 If the IFR is not explicitly used, Orber can be configured
to use a minimal IFR to reduce memory usage and installation
time.
OTP-5002 To avoid malicious attacks it is now possible to configure
Orber to limit the number of concurrent connections and
requests and the amount of IIOP fragments.
OTP-5004 The operation orber:iiop_connections/0 now also include
incoming connections.
OTP-5006 The function orber:add_node/2 now accepts more options.
OTP-5007 The module orber_diagnostics now exports a function which
list missing modules generated by IC and required by Orber.
Fixed bugs and malfunctions:
OTP-4700 Orber's NameService did not return a NIL object reference
if the total number of existing bindings was less than,
or equal to, the HowMany parameter passed to
'CosNaming_NamingContext':list/2 operation. This have now
been changed to be compliant with the OMG standard.
Furthermore, the operation 'CosNaming_BindingIterator':next_n/2
did not handle the index correctly in all situations.
OTP-5003 If the Orber internal gen_server orber_iiop_pm was stopped in
such a way that the terminate function was not invoked, then
ghost processes would appear.
OTP-5018 orber_ifr:contents/3 always returned an empty list when using
Light IFR. Little or no effect.
Incompatibilities:
OTP-5005 Since the OMG has defined a default port number (2809), Orber
no longer support the boostrap port.
OTP-4608 The work-around introduced in version 3.4.1 has now been removed.
Make sure you are using IC-4.2 or later.
OTP-5034 When using Light IFR it was not possible unregister data
(i.e., invoking 'MyModule':oe_unregister()).
Introduced in Orber-3.5.0.1.
--- os_mon ------------------------------------------------------------
OTP-4966 Os_mon_mib could add faulty records to it's tables when
rpc-calls failed due to remote nodes shutting down.
--- otp_mibs ------------------------------------------------------------
OTP-4801 Missing app- and appup-files in ebin-dir.
OTP-4823 Incorrect app-file (missing mandatory 'registered').
--- snmp ------------------------------------------------------------
OTP-4810 [agent] Minor errors in debug macros and sample config
file. Serge Aleynikov
OTP-4811 [agent] Code up/downgrade cleanup.
OTP-4825 [compiler] Fixed a parser error that caused the group
checks to behave erratic.
Also fixed related group check problems which among other
things produced cryptic error messages.
Reported Fixed Bugs and Malfunctions:
OTP-4879 Handling of subagents (with subtrees not in sequence).
When a subagent has two subtrees registered, A and C, and
another agent has a subtree between the two, B. A get-next
operation for the last variable in A would return the first
variable in B, which is wrong. The master agent did check
this, but not very good.
Martin Björklund
Improvements and new features:
OTP-4873 Added new date and time function(s) utilizing the
local_time_to_universal_time_dst of the calendar module.
See local_time_to_date_and_time_dst and
date_and_time_to_universal_time_dst.
The old functions, local_time_to_date_and_time/1 and
date_and_time_to_universal_time/1, has been obsoleted and
will be removed at a later date.
Incompatibilities:
Functions snmp:local_time_to_date_and_time/1 and
snmp:date_and_time_to_universal_time/1, has been
obsoleted and will be removed at a later date.
Improvements and new features:
OTP-4980 [agent] Improved load control. Added a new config
parameter, snmp_req_limit, which allow for some load
control, see configuration parameters.
OTP-4993 [agent] The example manager cannot handle start option
receive_type.
OTP-4931 [compiler] Notifications now included in generated header
files.
OTP-4934 [compiler] Defines of the SNMPv2-TC now builtin. This also
means that the SNMPv2-TC provided with this application is
the proper one.
OTP-4996 [agent] Added functions to add/delete config in runtime,
equivalent to the config files:
- add_community/5 and delete_community/1
- add_context/1 and delete_context/1
- add_notify/3 and delete_notify/1
- add_addr/10, delete_addr/1, add_params/5 and
delete_params/1
- add_user/13 and delete_user/1
- add_sec2group/3, delete_sec2group/1, add_access/8,
delete_access/1, add_view_tree_fam/4 and
delete_view_tree_fam/1
Reported Fixed Bugs and Malfunctions:
OTP-4978 [agent] Access with typo causes system crash. Adding a
rudimentary type check to the (set-) access functions:
- SNMP-COMMUNITY-MIB: snmpCommunityTable/3
- SNMP-NOTIFICATION-MIB: snmpNotifyTable/3
- SNMP-TARGET-MIB: snmpTargetAddrTable/3,
snmpTargetParamsTable/3
- SNMP-USER-BASED-SM-MIB: usmUserTable/3
- SNMP-VIEW-BASED-ACM-MIB: vacmSecurityToGroupTable/3,
vacmAccessTable/3 & vacmViewTreeFamilyTable/3
OTP-4981 [compiler] SNMP compiler cannot handle MIBs without
object defs.
OTP-3843 [agent] Instrumentation function usmUserTable exited on
bad values.
OTP-4999 SNMP trap send stops after change to Access Group Data
OTP-5000 get-next on vacmAccessTable failes for column 3
OTP-5017 snmp_user_based_sm_mib:add_user/13 calls undef function
snmp_conf:check_user/1. Should have been
snmp_conf:check_usm/1
OTP-5041 Incorrect (v3-) password causes the agent to not send a
report back to the manager and counters to not be updated,
due to a decode crash.
Improvements and new features:
OTP-5056 Application test directory included in the source release.
Reported Fixed Bugs and Malfunctions:
OTP-5051 [compiler] The value range part of the SYNTAX Integer32
does not handle values given as hexStr or bitStr
(only 10-base integers).
OTP-5052 [compiler] The mib compiler cannot handle mib
traps/notifications with included values (OBJECTS)
which are defined later in the MIB.
--- ssl ------------------------------------------------------------
OTP-4971 The UTF8String type is now defined in asn1-1.4.4.2 and later.
Therefore the definitions of UTF8String has been removed from
the ASN.1 modules PKIX1Explicit88.asn1 and PKIXAttributeCertificate.asn1.
The SSL application can now only be built using asn-1.4.4.2 or later.
--- stdlib ------------------------------------------------------------
OTP-4788 When the emulator was started with command line arguments
-run or -s and the started code did an uncatched
erlang:throw/1, the emulator ignored the throw which is
rather strange. Now the init process exits with nocatch as
expected.
OTP-4802 The code server could hang if invoked early in the startup.
For example if the emulator was started with "-s file eval
Filename" and Filename contained a call to code:add_patha/1
the code server accidentally tried to execute code in an
unloaded module from inside the code that loaded a module -
hence hangup. This bug has now been fixed.
OTP-4820 gen_server:s internal function get_parent, called by
gen_server:enter_loop/[4,5], now returns the pid of parents
that are registered processes, instead of returning their
name. The reason for this is that gen_server relies on that
the parent is represented as a pid. This error in
get_parent/0 had the effect that the terminate function of
the child was not run when it was shutdown.
OTP-4787 A bug in erl_scan caused the compiler to hang when
end-of-file in a comment was encountered. This is now
corrected.
OTP-4831 The linter now reports errors for unsafe variables when the
option <c>nowarn_unused_vars</c> is given.
OTP-4844 <p><code>gen_server:cast/2</code> now crashes for invalid
arguments.
<p><code>gen_server:abcast/2-3</code> now crashes for
invalid arguments. The behaviour when casting to the name
<code>global</code> has been corrected. Previously,
<code>gen_server:abcast(global,[node@REDACTED])</code> tried to
cast to the globally registered name <code>node@REDACTED</code>,
which is more of a bug than less. Now such a call will cast
to the registered name <code>global</code> at the node
<code>node@REDACTED</code> as (probably) expected.
<p>An <code>rpc:call/5</code> and
<code>rpc:block_call/5</code> having a timeout argument has
been added. <p><code>rpc:abcast/2-3</code> has been improved
not to get stuck waiting for connection setup if the remote
node is not connected. In this case the send is spawned off
to a temporary process.
OTP-4846 The boot server had become broken. Now it works again.
OTP-4855 When loading a dynamically linked in driver through
erl_ddll, the server ddll_server that held the port for the
driver handling shared libraries got the group leader of the
invoking application. Later, when the application was
terminated, it killed all processes in its group, also the
ddll_server, so the driver still had some shared libraries
loaded. Finally, when the ddll_server was restarted it
assumed that all shared libraries its driver knew of was
statically linked, so the dynamically linked in drivers that
was loaded when ddll_server was killed could neither be
loaded nor unloaded. This bug has now been fixed by setting
the group leader of ddll_server to something harmless and
more eternal, and by unloading all remaining dynamically
linked in drivers when ddll_server starts. A race condition
when starting ddll_server has also been fixed.
OTP-4818 The f/1 shell command did not work correctly with
restricted shell.
OTP-4876 The driver for dynamically linked in drivers has been fixed
to delete loaded drivers when its erlang server dies. The
erlang server has also been updated to improve the
start-on-demand behaviour.
OTP-4890 The shell function c:regs() did crash if there was a
registered port among the registered names. This is now
corrected.
OTP-4892 erlang:register/2 does no longer generate an ERROR
REPORT to the error logger when the name already is
registered. If the name is already registered the process
function will crash with {'EXIT',Reason} and that is enough.
It is up to the caller to decide if it is an error that the
name is already registered.
OTP-4897 Starting Erlang with the +Bi flag (to ignore ^C), now also
disables the quit ('q') option in the JCL menu.
OTP-4898 A stdlib application variable, shell_esc, has been
introduced that controls the behaviour of ^G. If
shell_esc is set to abort, ^G restarts the
shell. If set to jcl, ^G invokes the JCL menu. The
latter is default.
OTP-4903 When using erlang:system_monitor(Pid,{long_gc,Time}), and the
GC time exceeded 1 second, it sometimes erroneously showed up
as about 4300 seconds. This bug has now been corrected.
OTP-4906 A bug has been fixed in Dets: not all objects were
always visible in tables with more than 131072 keys
OTP-4907 A bug has been fixed in Dets: when trying to repair a
version 9 table, a not_a_dets_file error message was
returned unnecessarily often.
OTP-4914 Distributed monitoring in combination with nodes restarting
did not behave correctly in rare circumstances.
OTP-4952 If a gen_server, gen_event or gen_fsm process exits with
{undef,[{M,F,A}|...]}, the error report will now state if the
function call failed because the module could not be loaded
or because the function was not exported.
OTP-4963 A module containing code similar to 'receive after 4.1' could
not be loaded.
OTP-4979 The Solaris kernel poll feature was changed from a compile
time option to a runtime option. The kernel poll feature can
be enabled, by passing the command-line argument "+K true" to
an emulator (see erl(1)) that have kernel poll support, i.e.
an emulator for Solaris 8. By default the kernel poll feature
is disabled.
OTP-4985 Before the Erlang emulator writes an erl_crash.dump file (for
any reason), it will close all open files and sockets.
OTP-4986 The '+c' switch has been added to disable time correction in
the runtime system, this should be used on systems where one
is certain no dramatic wall clock time changes will occur and
the time correction algorithm is too costly (namely very fast
Linux systems where loads of erlang:now() are executed).
OTP-4989 When opening a Dets table read only an attempt was made to
re-hash the table resulting in an error message. This problem
has been fixed.
OTP-4991 The process_flag/2,3 BIFs now take a flag min_heap_size that
allows changing an existing process's minimum heap size. The
actual size will only be changed when the next garbage
collection occurs.
OTP-4992 Problems fixed in file:open/2: "/dev/null" can now be opened.
Opening a FIFO will now return an error instead of hanging
the emulator. The documentation has been updated to point out
that file:open/2 returns the error code <c>eisdir</c> when
the pathname is not a regular file (the pathname is not
necesserarily a directory).
OTP-5046 If many files or sockets were open (more than 256), beam_lib
operations could fail. Corrected.
OTP-4789 A few portability enhancements for the R9C-1 Open Source
release: The installer for Windows can now be built with NSIS
2.0 (as well as with the NSIS 2.0b3). The driver header files
updated to allowed drivers to be built wich the MinGW
compiler on Windows. Minor portability enhancement in
io_lib:fread.
OTP-5026 Conversion of extremely small floating point numbers in the
external format (distribution) could sometimes fail leading
to unexpected closing of distribution channels, i.e.
generating nodedowns for healthy nodes.
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list