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) 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 nowarn_unused_vars is given. OTP-4844

gen_server:cast/2 now crashes for invalid arguments.

gen_server:abcast/2-3 now crashes for invalid arguments. The behaviour when casting to the name global has been corrected. Previously, gen_server:abcast(global,[node@host]) tried to cast to the globally registered name node@host, which is more of a bug than less. Now such a call will cast to the registered name global at the node node@host as (probably) expected.

An rpc:call/5 and rpc:block_call/5 having a timeout argument has been added.

rpc:abcast/2-3 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 eisdir 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 nowarn_unused_vars is given. OTP-4844

gen_server:cast/2 now crashes for invalid arguments.

gen_server:abcast/2-3 now crashes for invalid arguments. The behaviour when casting to the name global has been corrected. Previously, gen_server:abcast(global,[node@host]) tried to cast to the globally registered name node@host, which is more of a bug than less. Now such a call will cast to the registered name global at the node node@host as (probably) expected.

An rpc:call/5 and rpc:block_call/5 having a timeout argument has been added.

rpc:abcast/2-3 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 eisdir 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 nowarn_unused_vars is given. OTP-4844

gen_server:cast/2 now crashes for invalid arguments.

gen_server:abcast/2-3 now crashes for invalid arguments. The behaviour when casting to the name global has been corrected. Previously, gen_server:abcast(global,[node@host]) tried to cast to the globally registered name node@host, which is more of a bug than less. Now such a call will cast to the registered name global at the node node@host as (probably) expected.

An rpc:call/5 and rpc:block_call/5 having a timeout argument has been added.

rpc:abcast/2-3 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 eisdir 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.