Bug fix release : otp_src_R12B-2 Build date : 2008-04-09 This is bug fix release 2 for the R12B release. You can find the README file for the release at http://www.erlang.org/download/otp_src_R12B-2.readme (this file) The source distribution and binary distribution for Windows can be downloaded from http://www.erlang.org/download/otp_src_R12B-2.tar.gz http://www.erlang.org/download/otp_win32_R12B-2.exe Beginning with this release, the distribution can also be downloaded using the BitTorrent protocol. Use the following torrent files to download the source distribution and binary distribution for Windows: http://www.erlang.org/download/otp_src_R12B-2.tar.gz.torrent http://www.erlang.org/download/otp_win32_R12B-2.exe.torrent Note: To unpack the TAR archive you need a GNU TAR compatible program. For installation instructions please read the README file that is part of the distribution. The on-line documentation can be found at: http://www.erlang.org/doc/ You can also download the complete HTML documentation or the Unix manual files http://www.erlang.org/download/otp_doc_html_R12B-2.tar.gz http://www.erlang.org/download/otp_doc_man_R12B-2.tar.gz We also want to thank those that sent us patches, suggestions and bug reports, The OTP Team --- asn1-1.5.1 ------------------------------------------------------------ OTP-7149 A bug related to renaming of types has been fixed.This occured using the .set.asn functionality. OTP-7154 syntax error in ASN1 value now correctly shown OTP-7155 Now an COMPONENTS OF construct in an parameterized type is expanded correctly OTP-7169 Now the asn1-compiler also handles empty SEQUENCE DEFAULT values as {}. OTP-7171 Now SelectionType gets the tag of the selected type. OTP-7193 Correction of generated code for decode of an open type in a SEQUECNE OF/ SET OF OTP-7199 Misc improvements and bug corrections regarding default values. --- compiler-4.5.1.1 ------------------------------------------------------------ OTP-7188 Corrected a compiler bug that could cause a complex binary matching operation to fail when it shouldn't. (Thanks to Tomas Stejskal.) OTP-7202 In unusual circumstances, the environment for a fun could bind wrong values. OTP-7206 Long sequences of list comprehensions without generators joined by the '++' operator would cause a code expansion explosion, which could cause the compiler to run out of memory. To resolve this problem, in '[...||...]++Expr', Expr is now evaluated before the list comprehension. This change is backwards compatible (see the following note about evaluation order if you have doubts). Note about evaluation order: The Reference manual says that subexpressions are evaluated in any order before the expression itself. Therefore, in an expression such as 'LeftExpr++RightExpr', you should not depend on LeftExpr being evaluated before RightExpr or vice versa. The evaluation order is only important if the expressions contains and/or depends on operations with side-effects, such as message passing or ets operations. --- compiler-4.5.2 ------------------------------------------------------------ OTP-7223 A bug in the old inliner has been fixed. Some undocumented functionality has been removed. OTP-7227 Matching several binary patterns in parallel using the '=' operator is not allowed (an implementation limitation), but the compiler did not reject all such attempts (depending on the patterns, the generated code might or might not work correctly). Now the compiler rejects all binary patterns joined by '='. OTP-7233 Complex combinations of record operations and binary matching could cause the compiler to crash. (Thanks to Vladimir Klebansky.) OTP-7240 In rare circumstances, mixing binary matching clauses with clauses matching other data types, the compiler could crash. --- cosEvent-2.1.3 ------------------------------------------------------------ OTP-7011 Updated file headers. --- cosEventDomain-1.1.3 ------------------------------------------------------------ OTP-7011 Updated file headers. --- cosFileTransfer-1.1.5 ------------------------------------------------------------ OTP-7011 Updated file headers. --- cosNotification-1.1.7 ------------------------------------------------------------ OTP-7011 Updated file headers. --- cosProperty-1.1.6 ------------------------------------------------------------ OTP-7011 Updated file headers. --- cosTime-1.1.3 ------------------------------------------------------------ OTP-7011 Updated file headers. --- cosTransactions-1.2.4 ------------------------------------------------------------ OTP-7011 Updated file headers. --- dialyzer-1.8.0 ------------------------------------------------------------ OTP-7241 Dialyzer's analysis is from now on exclusively based on success typings. In particular, support for options --old_style and --dataflow has been discontinued. Better and more aggressive handling of type information in records. Dialyzer has a new warning option -Wunmatched_returns which warns for function calls that ignore the return value. This catches many common programming errors (e.g. calling file:close/1 and not checking for the absence of errors), interface discrepancies (e.g. a function returning multiple values when in reality the function is void and only called for its side-effects), calling the wrong function (e.g. io_lib:format/1 instead of io:format/1), and even possible performance defects (e.g. unnecessarily constructing a list using a list comprehension instead of using lists:foreach/2). Whenever a function returns a single atomic value (e.g. 'ok' or pid()), the warning is suppressed. This allows for "void" functions (returning a single atom like 'ok') or for calls to certain builtins like spawn. Because not all calls which ignore the return value are discrepancies, the option is off by default and has to be explicitly requested by the user. But we recommend it nevertheless. Some warning options (-Wno_comp, -Wno_guards, -Wno_unsafe_beam, etc.) which could be used when analyzing bytecode produced by an old BEAM compiler have been removed. --- docbuilder-0.9.8.4 ------------------------------------------------------------ OTP-7236 The element "code" with multiple CDATA or CDATA plus other data now works as expected, previously it caused a crash. --- edoc-0.7.5 ------------------------------------------------------------ OTP-7243 Minor updates, mostly cosmetic. --- erl_interface-3.5.6 ------------------------------------------------------------ OTP-7183 Minor documentation fixes. --- erts-5.6.1.1 ------------------------------------------------------------ OTP-7167 The {allocator_sizes, Alloc} and alloc_util_allocators arguments are now accepted by erlang:system_info/1. For more information see the erlang(3) documentation. OTP-7176 Not enough parameters were passed when sending an error report in erl_check_io.c (Thanks to Matthew Dempsky). OTP-7187 The finishing reallocation of the heap block when hibernating a process is now always moving the heap block since it drastically reduces memory fragmentation when hibernating large amounts of processes. OTP-7198 In rare circumstances, complex binary matching code could cause the emulator to crash or not match when it should. (Thanks to Rory Byrne.) --- erts-5.6.2 ------------------------------------------------------------ OTP-7128 More checksum/hash algorithms from the zlib library are now available as built in functions (like md5 hashes has been for a long time). OTP-7139 Minor improvements in the garbage collector. OTP-7142 The switch "-detached" to the windows werl program now can create an erlang virtual machine without any main window and without a temporary console showing. OTP-7147 The maximum length of an atom of 255 characters is now strictly enforced. binary_to_term/1 will now fail with a badarg if an encoded term contains an atom longer than 255 characters. Atoms created by drivers will now be truncated to 255 characters if necessary. (Thanks to Matthew Dempsky.) OTP-7175 erlang:system_info/1 now accepts the logical_processors, and debug_compiled arguments. For more info see the, erlang(3) documentation. The scale factor returned by test_server:timetrap_scale_factor/0 is now also effected if the emulator uses a larger amount of scheduler threads than the amount of logical processors on the system. OTP-7177 A bug in "bignum handling" on some 64bit architectures could cause rem and div operations on large numbers to hang indefinitely. Rem operations involving the smallest negative number representable in 28 bits or 60 bits could also cause access violation and emulator crash. Both errors are corrected. OTP-7200 A new BIF ets:update_element/3. To update individual elements within an ets-tuple, without having to read, update and write back the entire tuple. OTP-7212 When doing the initial garbage collection after waking a hibernated process, a fullsweep garbage collection was unnecessarily triggered. OTP-7213 A process executing the processes/0 BIF can now be preempted by other processes during its execution. This in order to disturb the rest of the system as little as possible. The returned result is, of course, still a consistent snapshot of existing processes at a time during the call to processes/0. The documentation of the processes/0 BIF and the is_process_alive/1 BIF have been updated in order to clarify the difference between an existing process and a process that is alive. OTP-7225 The beta testing module gen_sctp now supports active mode as stated in the documentation. Active mode is still rather untested, and there are some issues about what should be the right semantics for gen_sctp:connect/5. In particular: should it be blocking or non-blocking or choosable. There is a high probability it will change semantics in a (near) future patch. Try it, give comments and send in bug reports! OTP-7226 Invalid arguments to ets:update_counter/3 were not handled correctly. A tuple position (Pos) less than 1 caused the element directly following the key to be updated (as if no position at all had been specified). All invalid values for Pos will now fail with badarg. OTP-7260 The runtime system with SMP support could under rare circumstances deadlock when a distribution channel was taken down while multiple simultaneous operations were performed on it. --- gs-1.5.9 ------------------------------------------------------------ OTP-7242 Fixed grid_line crash, which caused tv, debugger and pman crashes. Thanks Jan Jacobs and others. --- hipe-3.6.6 ------------------------------------------------------------ OTP-7254 A fix for an #include problem which caused the FP exception test to fail unnecessarily on debian/glibc-2.7/x86 systems. Added SIGFPE loop detection to the FP exception test. This prevents the test from looping indefinitely, which could happen when the CPU is supported (so we can enable FP exceptions on it) but the OS isn't (so we can't write a proper SIGFPE handler). x86 on an unsupported OS is known to have had this problem. OTP-7255 HiPE now also supports little-endian ARM processors. --- ic-4.2.17 ------------------------------------------------------------ OTP-7011 Updated file headers. --- inets-5.0.3 ------------------------------------------------------------ OTP-7144 Updated copyright headers and fixed backwards compatibility for an undocumented feature, for now. This feature will later be removed and a new and documented option will take its place. --- inets-5.0.4 ------------------------------------------------------------ OTP-7172 Changed calls to file open to concur with the API and not use deprecated syntax. OTP-7173 [tftp] Server lost the first packet when the client timed out --- inets-5.0.5 ------------------------------------------------------------ OTP-7220 [tftp] Blocks with too low block numbers are silently discarded. For example if a server receives block #5 when it expects block #7 it will discard the block without interrupting the file transfer. Too high block numbers does still imply an error. External TR HI96072. OTP-7221 [tftp] The problem with occasional case_clause errors in tftp_engine:common_read/7 has been fixed. External TR HI97362. --- kernel-2.12.1.1 ------------------------------------------------------------ OTP-7185 Fixed a problem in group that could cause the ssh server to lose answers or hang. --- kernel-2.12.1.2 ------------------------------------------------------------ OTP-7167 The {allocator_sizes, Alloc} and alloc_util_allocators arguments are now accepted by erlang:system_info/1. For more information see the erlang(3) documentation. OTP-7176 Not enough parameters were passed when sending an error report in erl_check_io.c (Thanks to Matthew Dempsky). OTP-7187 The finishing reallocation of the heap block when hibernating a process is now always moving the heap block since it drastically reduces memory fragmentation when hibernating large amounts of processes. OTP-7198 In rare circumstances, complex binary matching code could cause the emulator to crash or not match when it should. (Thanks to Rory Byrne.) --- kernel-2.12.2 ------------------------------------------------------------ OTP-7175 erlang:system_info/1 now accepts the logical_processors, and debug_compiled arguments. For more info see the, erlang(3) documentation. The scale factor returned by test_server:timetrap_scale_factor/0 is now also effected if the emulator uses a larger amount of scheduler threads than the amount of logical processors on the system. OTP-7186 Updated the documentation for erlang:function_exported/3 and io:format/2 functions to no longer state that those functions are kept mainly for backwards compatibility. OTP-7209 A bug caused by a race condition involving disk_log and pg2 has been fixed. OTP-7213 A process executing the processes/0 BIF can now be preempted by other processes during its execution. This in order to disturb the rest of the system as little as possible. The returned result is, of course, still a consistent snapshot of existing processes at a time during the call to processes/0. The documentation of the processes/0 BIF and the is_process_alive/1 BIF have been updated in order to clarify the difference between an existing process and a process that is alive. OTP-7225 The beta testing module gen_sctp now supports active mode as stated in the documentation. Active mode is still rather untested, and there are some issues about what should be the right semantics for gen_sctp:connect/5. In particular: should it be blocking or non-blocking or choosable. There is a high probability it will change semantics in a (near) future patch. Try it, give comments and send in bug reports! OTP-7244 tuple_size/1 and byte_size/1 have been substituted for size/1 in the documentation. --- megaco-3.7.2 ------------------------------------------------------------ OTP-6972 There is a race condition when cancelling requests during a high load situations which could lead to spurious (megaco internal) messages beeing sent to user processes. When a request is issued using megaco:call, which returns only after a "reply" can be delivered, the request timer might expire during the cancelling of the request, which will cause megaco to attempt to deliver the timeout info, which will result in the spurious message. This problem has now been eliminated by introducing a proxy process, which simply dies when the "real" response has been delivered. The spurious reply will then be sent to a non-existing process. OTP-7138 [text] Decoding a version 2 message with an observedEventParameter where the value of the parmValue was CT, failes. CT is defined as the context attribute token in version 3, and this incorrectly caused the scanner (which is version agnostic) to create an ContextAttrToken, which caused the version 2 parser to crash. --- megaco-3.7.3 ------------------------------------------------------------ OTP-7168 The behaviour megaco_encoder was lacking three functions which was made mandatory as of version 3.7. OTP-7180 Updated the graphs of the performace chapter with to reflect this version of megaco. Also included results with HiPE-compiled codec's. OTP-7189 It was possible to create permenant pending counter data for a somewhat misbehaving (request) receiver. If a megaco entity ("sender") sends a request and the "receiver" (of the request) responds with a pending message but never actually sends the reply (or if it is lost), the created pending counter data would never be deleted if the long_request_timer was set to infinity (old default) and the recv_pending_limit was set to an integer value (default is infinity). OTP-7216 If a counter where reset (wrap-around) as a result of increment larger than 1, then it was actually always set to the min_trans_id-value. --- megaco-3.7.4 ------------------------------------------------------------ OTP-7249 The (plain) text scanner could incorrectly identify character strings (any 17 char long string with the char t in the middle) as a TimeStampToken. OTP-7251 In order to better deal with codec's not implementing the entire megaco_encoder behaviour, translations of undefined (not implemented) functions to the {error, not_implemented} return value has been added for the functions megaco_encoder:encode_transaction, megaco_encoder:encode_action_requests and megaco_encoder:encode_action_reply. --- mnesia-4.4.1 ------------------------------------------------------------ OTP-7170 Snmp index tables was not initialized correctly in mnesia-4.4. --- mnesia-4.4.2 ------------------------------------------------------------ OTP-7205 Sticky locks could lead to hanging transactions. OTP-7208 mnesia:snmp_get_next_index/2 didn't work with partial index keys. Argument checking is now done according to documentation, in functions mnesia:snmp_get_row/2, mnesia:snmp_get_mnesia_key/2 and mnesia:snmp_get_next_index/2. These functions now require that RowIndexis a list. --- orber-3.6.9 ------------------------------------------------------------ OTP-7011 Updated file headers. --- parsetools-1.4.4 ------------------------------------------------------------ OTP-7224 The size of the code generated by Yecc has been reduced. The code is also faster. Macros can now be used in actions. --- percept-0.7 ------------------------------------------------------------ OTP-7162 Percept no longer depends on external c-libraries. The graphical rendering is now done via erlang code. --- percept-0.7.1 ------------------------------------------------------------ OTP-7215 Fixed out of bounds rendering problem in egd which could cause the rendering process to crash. --- runtime_tools-1.7.2 ------------------------------------------------------------ OTP-7164 etop now collects process information faster and more reliably than before (a race condition reported by Igor Goryachev has been eliminated). Trace messages could be lost when ttb:stop/0 was called. --- snmp-4.10.2 ------------------------------------------------------------ OTP-7152 snmp_generic:table_set_cols/3 did not handle unexpected return values correctly when setting column values. Serge Aleynikov OTP-7153 [agent] Uninstalling MEs when unloading mibs incorrect and therefor never done. OTP-7157 When sending a trap, the order of the variable bindings not provided by the trap-sender, could be mangled by the agent. OTP-7158 The MIB-compiler did not suppport a name assignment which was sequence of numbers, only a parent object name followed by a sequence of numbers. OTP-7159 Invalid variable value causes crashing agent worker process when sending traps. OTP-7160 The MIB-compiler did not recognize well-known-names as top parents. The names 'ccitt' (0) , 'iso' (1) and 'joint-iso-ccitt' (2) is now also recognized by the MIB compiler. --- snmp-4.10.3 ------------------------------------------------------------ OTP-7219 [manager] The config option inform_request_behaviour was not properly parsed, which caused the manager to revert to the default value, auto. --- ssh-0.9.9.6 ------------------------------------------------------------ OTP-7246 Updated asn1 file due to change in the asn1 compiler. This has no semantical effect on the ssh application. OTP-7247 Allows for the option {fd, FD} in listen and connect calls. The option is passed on to gen_tcp:listen and gen_tcp:connect --- stdlib-1.15.2 ------------------------------------------------------------ OTP-7064 The queue module has been rewritten to make it easier to use. Suggestions and discussion from and with among others Lev Walkin, Anders Ramsell and Rober Virding in december 2007 on erlang-questions@erlang.org. It was also discussed to change the internal representation to contain length information which would speed up len/1 but that change has been postponed. Anyone interested may write an EEP and try to reach an acceptable compromise for queue overhead and thereby the speed of all other operations than len/1. The queue module is now optimized for fast and minimal garbage in/2 and out/1 and such. See the documentation. New functions: is_queue/1, get/1, get_r/1, peek/1, peek_r/1, drop/1, drop_r/1 and liat/1. is_queue/1 is a new predicate, liat/1 is a correction of an old misspelling, and the others (get*, peek* and drop*) are new interface functions. OTP-7084 The functions io_lib:write/1,2 and io_lib:print/1,4 have been changed when it comes to writing floating point numbers. This change affects the control sequences p, P, w, and W of the io_lib module. (Thanks to Bob Ippolito for code contribution.) OTP-7146 When inserting many small objects, Dets sometimes crashed when reaching the maximum number of slots. (Thanks to Daniel Goertzen.) OTP-7184 Processes linked to the Erlang shell did not get an exit signal when the evaluator process was killed. This bug, introduced in R12B-0, has been fixed. OTP-7186 Updated the documentation for erlang:function_exported/3 and io:format/2 functions to no longer state that those functions are kept mainly for backwards compatibility. OTP-7200 A new BIF ets:update_element/3. To update individual elements within an ets-tuple, without having to read, update and write back the entire tuple. OTP-7226 Invalid arguments to ets:update_counter/3 were not handled correctly. A tuple position (Pos) less than 1 caused the element directly following the key to be updated (as if no position at all had been specified). All invalid values for Pos will now fail with badarg. OTP-7229 For certain terminals, io:columns/0 could return 0 instead of enotsup. That is now corrected. OTP-7231 string:join/2 now accepts an empty list as first argument. OTP-7232 qlc:info() can now handle port identifiers, pids, references, and funs. (Thanks to Wojciech Kaczmare for reporting this bug.) When evaluating the parent_fun messages sent to the process calling qlc:cursor() were sometimes erroneously consumed. This bug has been fixed. OTP-7234 erl_parse:abstract() can now handle bit strings. OTP-7238 qlc:info/1,2 accepts a new option, depth. The type SelectedObjects used in the description of qlc:table/2 has been augmented. OTP-7244 tuple_size/1 and byte_size/1 have been substituted for size/1 in the documentation. --- syntax_tools-1.5.4 ------------------------------------------------------------ OTP-7243 Minor updates, mostly cosmetic. --- test_server-3.2.2 ------------------------------------------------------------ OTP-7175 erlang:system_info/1 now accepts the logical_processors, and debug_compiled arguments. For more info see the, erlang(3) documentation. The scale factor returned by test_server:timetrap_scale_factor/0 is now also effected if the emulator uses a larger amount of scheduler threads than the amount of logical processors on the system. --- tv-2.1.4.2 ------------------------------------------------------------ OTP-7261 Minor updates. --- typer-0.1.2 ------------------------------------------------------------ OTP-7243 Minor updates, mostly cosmetic. --- xmerl-1.1.7 ------------------------------------------------------------ OTP-7190 xmerl's schema validation now takes default facets into account --- xmerl-1.1.8 ------------------------------------------------------------ OTP-7211 A Kleene Closure child in a sequence consumed all following childs. This problem has been fixed. OTP-7214 Now validating xhtml1-transitional.dtd. A certain contentspec with a succeding choice, that didn't match all content, followed by other child elements caused a failure. This is now corrected.