Bug fix release : otp_src_R8B-1 Build from snapshot : 20020412 This is a bug fix release R8B-1. You can download the full source distribution or the patch that take R8B-0 up to R8B-1. http://www.erlang.org/download/otp_src_R8B-1.tar.gz http://www.erlang.org/download/otp_src_R8B-0to1.patch.gz http://www.erlang.org/download/otp_src_R8B-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/ To patch the previous release "otp_src_R8B-0" you use a patch program that understand the "unified" patch format and do % cd otp_src_R8B-X % gzip -dc /location/of/patch/file/otp_src_R8B-0to1.patch.gz | patch -p1 For installation instructions please read the README that is part of the distribution. There is no support for building a Windows version from source. The Windows binary distribution can be downloaded from http://www.erlang.org/download/otp_win32_R8B-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_R8B-1.tar.gz http://www.erlang.org/download/otp_man_R8B-1.tar.gz The bug fixes and improvements in this release is described in the release notes below. 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 -- erts kernel stdlib runtime_tools --------------------------------------- OTP-4251 - The rpc behaviour has accidentally changed from R6B to R7B, so that an rpc:call() to a function that calls erlang:throw(Term) no longer returns Term, but rather {badrpc, {'EXIT, {{nocatch, Term}, _}}}. This has now been changed back to the original behaviour. OTP-3509 - A race condition in dist_ac has been removed. The documentation didn't clearly state that all distributed applications depend on (at least) kernel and stdlib (kernel and stdlib should be part of "applications" in the .app file). This has now been added to the app(4) manual page. The following has also been changed in the system documentation (not shipped with patches): PREVIOUSLY: When distributed applications are specified, it is advised that the sync_nodes functionality in the kernel application is used. If not used, and several nodes are started at the same time, the node that comes up first will start all applications, and the other nodes will take over the applications when they come up. NOW: When distributed applications are specified, it is required that the sync_nodes functionality in the kernel application (see kernel(6)) is used to synchronize all involved nodes. If not used, the distribution mechanism for distributed applications will not function correctly. OTP-4191 - A bug in disk_log:unblock/1 that could cause messages to be processed in wrong order has been fixed. Write errors no longer terminate the disk log process. OTP-4227 - When an application that depended upon another that had been started but crashed (supervisor killed), tried to start but failed (as expected), the return value was {error, no_report}, which now has been corrected to {error, {not_running, App}}. OTP-4224 - If poll() is missing the function prototype for driver_select() was incorrect. Other small build problems on MacOS X 10.1 where corrected as well. OTP-4181 - Solaris embedded support was extended to other Unix platforms. Mainly improvements in the run_erl/to_erl Unix commands. OTP-4179 - spawn_opt/4 used 0 as default value for fullsweep_after instead of the default value used by spawn/3, and spawn_link/3. This caused all processes spawned by spawn_opt/4 (e.g. all gen_servers) to always use fullsweep if the fullsweep_after option wasn't explicitly set. spawn_opt/4 has now been changed to use the same default value as spawn/3, and spawn_link/3. OTP-4184 - Due to unstable resolving mechanisms in the host OS, the inet_gethost_native service may timeout, which in turn can make net_kernel crash. This is fatal to the OTP system. OTP-4185 - The spawn bifs didn't fail with badarg as they should if the argument list wasn't a list; instead, the spawned process immediately exited. All spawn BIFs now fail with badarg if they are passed a bad argument as argument list. spawn BIFs which take funs as arguments and remote spawn BIFs could fail with other errors than badarg when passed bad arguments. All spawn BIFs now fail with badarg when they fail due to bad arguments. OTP-4189 - Documentation of the previously undocumented proc_lib:spawn_opt/4, and the spawn_opt option of gen_server:start, and gen_fsm:start has been added. OTP-4190 - Due to a bug in the Solaris system call gethrtime, which is used for the Erlang internal time correction, implicit (internal) time correction is now disabled on certain hardware/software platforms. OTP-4244 - Distribution table entries used for hidden nodes can now be reused. The distribution table is a table used internally in the Erlang run-time system. An entry in the distribution table contains information about a node. The distribution table can contain at most 256 entries (one of them is used for the local node). An entry will be reserved the first time a node needs to store information about a specific remote node, and this entry will normally never be reused for information about another remote node. When a hidden node is disconnected, the distribution table entry used for the hidden node will be unreserved, so that it later can be reused. This is the only event that unreserves an entry. Events that reserves an entry are: * A pid, a port, or a reference from previously unknown node enters the node. (for example: a pid originating from an unknown node is received in a message from another node). * A new connection to a previously unknown node. nodes(known) (BIF) returns a list of all nodes that there currently are distribution table entries reserved for. OTP-4255 - The set_net_ticktime/[1,2] and get_net_ticktime/0 functions has been added to the net_kernel module (see net_kernel(3)) which makes it possible to change the net_tick time during operation. OTP-4267 - sl_alloc release 2 has been introduced in the emulator. By default sl_alloc release 1 is enabled. For information on how to enable sl_alloc release 2, etc, see the sl_alloc(3) man page. OTP-4273 - When setting the process flag 'save_calls', the process got scheduled out more often than without the flag. This is no longer the case. OTP-4276 - The supervisor module could behave incorrectly during code change, simple_one_for_one supervised children got duplicate childspecs after upgrade causing the supervisor to crash. The SupFlags from Module:init was also ignored by the code_change callback in supervisor. Both these malfunctions are now corrected. OTP-4277 - Same as OTP-4276 above. OTP-4283 - A special purpose Bif to be used when communicating with unreliable C nodes is added. This Bif is only recommended for special purposes. It's named erlang:send_nosuspend/2 and the process gets a boolean reply telling if the message could be sent without the driver blocking (suspending) the erlang process due to excessive driver output queue length. OTP-4291 - The send_nosuspend does now also appear in a version with an optionlist. The single allowed option is noconnect, which makes the bif simply return 'false' when sending to a node not currently connected. OTP-4300 - The call ets:test_ms({0,3},[{{1.47,'_'},[],['$_']}]). and similar comparisons between small integers and values stored on the heap could crash the emulator. The necessary checks are now added to avoid this. OTP-4309 - Huge timechanges on linux could make erlang confused, this is now corrected. OTP-4312 - System flags (+ command line arguments) taking values weren't handled correctly. If the value and the system flag were separated by whitespace some flags didn't work (e.g. +A 10). If multiple system flags with their corresponding values were passed, and the flags and the values were separated by whitespace, all of these flags were replaced by the last one passed. These bugs have now been corrected. OTP-4313 - More memory block types (most of the existing ones) are now identified by the instrumented emulator. OTP-4314 - Memory blocks in the emulator that are guaranteed never to be removed are placed in a special block at the beginning of the emulators heap segment if there are space left in it. This special block has been called the definite alloc block. The size of the definite alloc block can be set with the +d system flag (see the erl(1) manpage) (default size is 2 Mb). The tuple {definite_alloc, BlockSize, UsedSize} that is part of the list returned from erlang:system_info(allocated_areas) can be used to determine how much that is used of the definite alloc block. OTP-4222 - When the match spec {set_seq_token, _, _} was used to start sequential tracing, it crashed the heap of the process it was running from, and corrupted heap data or crashed the emulator. This bug has now been corrected. OTP-4218 - Messages received from ports does no longer reset the seq trace token for the receiving process. This might be regarded as an incompatibility, but presumably desired. Now the seq trace token does not get swallowed by file operations, io operations, and other kernel/stdlib functions that use ports in their implementation. OTP-4183 - The tool Fprof in application Tools has been improved. See OTP-4183 in the tools section. OTP-4301 - Negative field sizes in construction of binaries using the bit syntax would crash the emulator. Corrected. OTP-4265 - application:start/1,2 could in some cases return an erroneous error reason if the application callback function Module:start/2 returned {error,Reason}. OTP-4204 - lists:sort/2 and lists:merge/3 were not stable. lists:ukeysort/3 and lists:usort/2 could leave duplicates. A bug in lists:umerge/3 has been fixed. OTP-4327 - There are new functions bchunk/2,3 in the disk_log module that are to be used like chunk/2,3 but return objects as binaries. OTP-4268 - Bug fixes in Dets: delete_object after insert on a table of set type could cause crash; it was sometimes impossible to open a fragmented table; init_table did not always call InitFun exactly once; delete_all_objects did not handle fixed tables correctly. The function init_table recognizes the new options min_no_slots and format. The new function bchunk can be used in conjunction with init_table for copying open tables efficiently. OTP-4326 - The file_sorter module now provides an easy way of passing a value from input functions to output functions: if the last input function returns {end_of_input, Value}, the first output function is called with the argument {value, Value}. OTP-4208 - Traversing a read only Dets table no longer results in a crash. OTP-4220 - When converting a version 8 Dets file or repairing a version 9 Dets file containing sufficiently large objects, the resulting file was sometimes badly formed. This has been fixed. OTP-4221 - The file_sorter module now recognises a format called binary which compares binaries using the standard order of terms. -- compiler --------------------------------------------------------------- OTP-4194 - Using the 'not' operator in guards could crash the emulator. OTP-4219 - A bug in the compilation of bit syntax matching could cause parts of the binary to be skipped. -- erl_interface ---------------------------------------------------------- OTP-4217 - The function ei_x_encode_binary() was added. OTP-4333 - A memory allocated bug was corrected in ei_x_encode_term(). -- os_mon ----------------------------------------------------------------- OTP-4225 - OpenBSD support for OS_MON contributed by Daniel Neri. -- orber ------------------------------------------------------------------ OTP-3966 - If the underlying OS was not configured to allow Erlang to use the fully qualified host name the result could an incorrect IP-address. Hence, if you want to upgrade to Orber-3.2.11 and the fully qualified name must be used you must upgrade your kernel version. Most likely, this change will NOT cause any problems, but if in doubt please contact support or use the mailing-list. See also the release notes for Orber-3.2.6. OTP-4264 - When looking up Initial Service (e.g. using corbaloc, corbaname or corba:resolve_initial_references_remote/2) and communicating via SSL, Orber used the wrong port number. OTP-4293 - When invoking a Locate Request, Orber in some cases did not reply with a Locate Reply header (used a Reply header). OTP-4294 - Orber now check if an external IOR contains any TAG_ALTERNATE_IIOP_ADDRESS components when trying to setup a connection to another ORB. It is now possible to add TAG_ALTERNATE_IIOP_ADDRESS components to a local object reference. See corba:add_alternate_iiop_address/3. OTP-4295 - Orber now allows unions with no default value defined and a discriminator out of range to be sent via IIOP. The value-field is set to the atom undefined. OTP-4296 - The corba module now exports a function, print_object/1/2, which prints IOR's in a more readable form. OTP-4298 - Since "all" ORB's accept ISO-8859-1 encoding of chars and strings, Orber assumed that it could be used at all time to reduce the overhead. The JDK-1.3 only accepts ISO 646:1991 IRV (US-ASCII), even though ISO-8859-1 is default, which is why Orber now checks which codeset is accepted. New Features: OTP-4258 - It is now possible to add new initial references, which can, for example, be accessed via corba:resolve_initial_references/1 or the corbaloc schema. OTP-4262 - The orber module now exports functions, iiop_connections and iiop_connections_pending, which, respectively, list all currently open connections to other ORB's and connections which are in process of being set up to another ORB. OTP-4260 - Orber now allows the user to define an interval of ports which Orber is may use (i.e. ports on the local machine) when trying to connect to another ORB. This behavior is useful if Orber resides behind a firewall which only allow applications to use certain ports when communicating with the outside world. If this option is set, it is absolutely necessary to set iiop_connection_timeout. If not, there is risk that Orber run out of ports, which will result in communication failure. This option cannot be used when using SSL since it does not support this feature. The default behavior is that any available port will be used (as before). OTP-4259 - One can now install Orber's NameService as disc_copies, but the default behavior is that Orber uses ram_copies. OTP-4257 - A pre-compiled IIOP-trace interceptor is now included in the Orber release. For more information, see the Debugging chapter in the User's Guide. The Orber release now include OrberWeb, which is an extension of the WebTool application (first released in R8B). Hence, WebTool must be installed to enable this feature. For more information, see the chapter OrberWeb in the User's Guide. OrberWeb is intended to be used during test and development. OTP-4261 - It is now possible to set Orber's configuration parameters in, for example, an Erlang shell. Consult corba:orb_init/1 and orber:configure/2. Fixed Bugs: OTP-4229 - When setting up two Orber ORB's, where one of the ORB's domain name was a prefix of the other ORB's, communication via IIOP would fail. To eliminate any further configuration problems, one may not use ^G (i.e. "\007") in the domain name. Due to this change it is not possible to upgrade during run-time. OTP-4230 - When using a mix of IIOP-versions (1.0 vs 1.1/1.2) and sending/receiving IOR's to/from Orber could result in a MARSHAL exception. OTP-4263 - Encoding/decoding of wchar/wstring when using IIOP-1.2 do now follow the OMG standard. If your ORB do not follow the standard, contact support for information how to make a work-around to solve this problem. In most cases it is sufficient to configure the ORB's to communicate via IIOP-1.1. Incompatibilities: OTP-4263 - The encoding/decoding of wchar/wstring when using IIOP-1.2 have been updated. See above. OTP-4256 - Orber no longer returns a 'EXIT' message when trying to install Orber, i.e., invoking orber:install/1/2, on a disc-less node. But if if the installation fails due to any other reason, Orber still return a 'EXIT' message. Known bugs and problems: OTP-4257 - OrberWeb only tested with Netscape-4.75. Furthermore, until WebTool reaches version 1.0 OrberWeb should also be considered to be a beta version. OrberWeb do not escape arguments passed when, for example, creating a new context. Hence, for now you are recommended to only use letters. -- cosNotification -------------------------------------------------------- OTP-4340 - If one tries to set an unavailable/incorrect property or property value, an exception is thrown. In some cases the exception was not correct, which would cause problems if communicating via IIOP. OTP-4272 - When using Filter's, with the QoS OrderPolicy set to FifoOrder, and passing a sequence of structured events, they could be delivered in the wrong order. OTP-4272 - If Filter's where attached to Supplier proxies it could cause the Proxy to terminate. -- megaco ----------------------------------------------------------------- OTP-4224 - Fixed Makefile.in for the flex scanner. Removed unnecessary '-lfl' link option. OTP-4236 - Memory leak in the flex scanner. Message larger then approx. 1000 bytes cannot be decoded. Will cause a core dump! Note that this will only be a problem if the flex scanner has been configured as encoding/decoding module! -------- - Added another binary decoder; per_bin. To be able to use the per_bin encoder the ASN.1 application of version 1.3.2 or later is needed for R8B systems. For R7B01, ASN.1 of version 1.3.1.3 or later must be used. -------- - Installed source was not placed in their proper (sub-) directory. OTP-4212 - The megaco application now forwards unexpected replies. This is done with a call to handle_unexpected_trans/3. OTP-4213 - Megaco leaves entries in the megaco_replies table. OTP-4299 - Handling of comments in text messages incorrect. For the ordinary text codec comments did not work. For the flex text codecs, double quoted strings in comments did not work. OTP-4288 - The streams field in MediaDescriptor, has been made optional in order to comply with IGv6 6.50. It does also mean that the new default value is asn1_NOVALUE. OTP-4290 - The user arguments was not supplied to the callback function handle_unexpected_trans as described by megaco_user. -------- - The scanner item of system info has been removed and instead been replaced by text_config. Also no longer contains any MFA info. From now on, just the text config. -- inets ------------------------------------------------------------------ OTP-4241 - Function reading http body returns a deep list. This error was introduced as of inets-2.6.0. OTP-4243 - Request timeout calculation incorrect. OTP-4233 - Listener process dies with reason normal when listen socket closes unexpectedly. If the listener process dies with reason normal, the manager will now open a new listen socket if needed and create a new listener. OTP-4231 - Changing of disk log format failes. Restart of webserver after change of disk log format (DiskLogFormat) fails with arg_mismatch. OTP-4228 - Incorrectly formated disk log entries. term_to_binary was (incorrectly) used for the external format. OTP-4210 - Added a new configuration directive LogFileFormat, that alter the file-format of the log files. OTP-4207 - Calculation of content length incorrect. OTP-4195 - mod_disk_log returns an error reason that reflects the error. When disk_log not can open a log file. OTP-4159 - Request headers now read a chunk at a time (see the {active,once} inet option) for socket type ip_comm. OTP-4281 - When opening the disk log (mod_disk_log), an open attempt is made without a size option. If the file exist, then it is opened. If the file does not exist, then another attempt is made, this time with the size option. -- mnesia ----------------------------------------------------------------- OTP-4187 - Using mnesia:dump_tables/1 or mnesia:change_table_copy(Tab, Node, disc_copies) on a ram node (schema in ram) causes a crash in earlier mnesia-3.10.* releases. OTP-4215 - If a mnesia node was restarted during a checkpoint (also affects backups) the checkpoint would be trashed, which could lead to hangings, crashes and other undesired behaviours, including that the checkpoint could delete other applications ets tables. OTP-4318 - Checkpoints could crash mnesia when mnesia nodes started. OTP-4319 - Some schema operations could return {atomic, ok} but still fail to commit the operation on nodes with disc, e.g. transform_table. OTP-4320 - Mnesia left disk_log files opened in some cases, which could lead to crashes. OTP-4325 - mnesia:transform_table didn't work if table had indecies, it returned {atomic, ok} but the meta-data was not transformed. OTP-4292 - Transform table on disc_copies tables, sometimes fail to store the transformed records to disc. OTP-4338 - An empty (ram_copies table) file could be created when unpacking a fallback. OTP-4338 - Removed a possibility for getting inconsistent tables during table copying. OTP-4338 - mnesia:select/[2|3] now works with fragmented tables. -- snmp ------------------------------------------------------------------- OTP-4206 - Crypto keys changed from string to list. OTP-4209 - SNMP date diff check changed according to RFC 2579 (was according to RFC 1903). OTP-4282 - When opening a log file, the failure reason was not checked. Instead it was assumed to be {badarg,size} (when opened without the size option, this means the file does not exist). This is usually correct, but just to be on the safe side the test has been changed to make sure that no other results get through. OTP-4279 - Added possibility to specify own error report module (instead of the default, snmp_error). This is done with a new application config directive: snmp_error_report_mod, see configuration parameters. Also added a size limit to the snmp_error module. Messages larger then 1024 chars will be truncated. Added a very simple error report module, snmp_error_io, which writes the message to stdout using the io module (without any limitations). OTP-4250 - Test manager does not send error message in quiet mode. If the request to the manager contains an erroneous oid, no information is sent back to the client (that started the manager). See quiet config parameter for the new reply value. Added two new functions for oid to/from aliasname conversion, to be used by the test manager users, see oid_to_name and name_to_oid. OTP-4278 - Handling of large erroneous SNMP messages corrected. Encoding of the reply to these messages failed due to a bug in the length encoding. Also corrected counter increments. -- ssl -------------------------------------------------------------------- OTP-4305 - All options for gen_tcp are now allowed in SSL, except the option reuseaddr. -- ic --------------------------------------------------------------------- OTP-3222 - The IDL-compiler now (at last) supports integer literals also in hexadecimal and octal notation according to CORBA standard. From the standard ... Chapter 3.2.5 Literals Integer Literals An integer literal consisting of a sequence of digits is taken to be decimal (base ten) unless it begins with 0 (digit zero). A sequence of digits starting with 0 is taken to be an octal integer (base eight). The digits 8 and 9 are not octal digits. A sequence of digits preceded by 0x or 0X is taken to be a hexadecimal integer (base sixteen). The hexadecimal digits include a or A through f or F with decimal values ten through fifteen, respectively. For example, the number twelve can be written 12, 014, or 0XC. OTP-4323 - Merging of map's (___map___) using the ___merge___ function did not work. OTP-4322 - Error in generated C decode/encode functions for union's with discriminator where the union has no value for all discriminator values. E.g. a union with discriminator boolean where only the discriminator value TRUE has a corresponding union value. Here is how such a thing would look in IDL: union OptXList switch(boolean) { case TRUE: integer val; }; OTP-4310 - Scoped op calls ('{scoped_op_calls, true}') does not handle module/function names beginning with capital letter (e.g. Megaco should be 'Megaco') for oneway operations (handle_cast). OTP-4303 - A bug is fixed on C-IDL erlang binaries that caused pointer error when residing inside sequences. -- debugger --------------------------------------------------------------- OTP-4201 - Parts of the code, mainly for the GUI, has been rewritten in order to make Debugger more robust and efficient. The functionality remains the same but behaviour and appearance have changed slightly. Modules must have been compiled with the option debug_info set in order to be interpreted, only modules for which this is true are shown in the Interpret window. -- tools ------------------------------------------------------------------ OTP-4226 - The Emacs mode for Erlang was changed for compatibility with Emacs 21. OTP-4313 - More memory block types (most of the existing ones) are now identified by the instrumented emulator. OTP-4183 - The tool Fprof in application Tools has been improved: It now uses the 'caller' call trace match spec to get more reliable call stack information. There are more alternatives for the analysis listing, sorting options, summary, etc. The analysis listing format has been changed so standard Erlang parsing tools can be used to process the listing. A bug in the emulator that caused call trace match spec 'caller' to give erroneous return value for some guard BIFs when used in the body of a function has been corrected. The BIFs in question were: erlang:[abs/1, element/2, float/q, hd/1, length/1, node/1, node/0, round/1, self/0, size/1, tl/1, trunc/1, 'and'/2, 'or'/2, 'xor'/2, 'not'/1, '>'/2, '>='/2, '<'/2, '=<'/2, '=:='/2, '=/='/2, '/='/2, '+'/2, '-'/2, '*'/2, '/'/2, 'div'/2, 'rem'/2, 'bor'/2, 'band'/2, 'bxor'/2, 'bsl'/2, 'bsr'/2, 'bnot'/2, '-'/1, '+'/1] The BIF erlang:yield/0 has been fixed so that it does not bump the reduction count, and the calling process gets scheduled out faster. Previously, BIFs could be called between erlang:yield/0 and schedule out. Now, erlang:yield/0 is also invisible in a call trace. A new trace flag has been added that makes all trace timestamps be in cpu time, not wallclock time. See erlang:trace/3. This feature only works on OS'es that supports high resolution CPU time measurements (currently just Solaris), and has to be activated explicitly with a flag 'cpu_time' to fprof:trace/1 and related. -- misc ------------------------------------------------------------------- OTP-4216 - Corrections of the HTML documentation to conform to the standard "HTML 4.01 Transitional". OTP-3784 - Building from source may fail if INSTALL_PROGRAM is defined before configure is run. The make files for creating a FreeBSD port defined the install program to use "-s" for stripping a binary and this will fail for installing scripts. The make files are changed to use INSTALL_SCRIPT for scripts. -- EOF --