Bug fix release : otp_src_R11B-2 Build date : 2006-11-07 This is bug fix release 2 for the R11B release. You can download the full source distribution from http://www.erlang.org/download/otp_src_R11B-2.tar.gz http://www.erlang.org/download/otp_src_R11B-2.readme (this file) Note: To unpack the TAR archive you need a GNU TAR compatible program. For instance, on MacOS X before 10.3 you must 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_R11B-2.exe On-line documentation can be found at http://www.erlang.org/doc.html. You can also download the complete HTML documentation or the Unix manual files http://www.erlang.org/download/otp_doc_html_R11B-2.tar.gz http://www.erlang.org/download/otp_doc_man_R11B-2.tar.gz We also want to thank those that sent us patches, suggestions and bug reports, The OTP Team --- documentation ------------------------------------------------------------ OTP-6240 Corrected some small bugs in Programming Examples, Getting Started With Erlang and OTP Design Princples. (Thanks to Tamas Szilagyi, Shannon -jj Behrens and Kari Pahula). --- compiler-4.4.2 ------------------------------------------------------------ OTP-6212 Defining a fun itself containing a fun in an after block of a try would cause the compiler to crash or generate incorrect code. (Thanks to Tim Rath.) Shorter compilation times for modules containing with an extreme number of functions (10000 functions or more). (The compiled could generate deprecated instructions for certain bit syntax matching operations.) OTP-6260 Fixed several bugs that would cause warnings to be shown without file name and line number. OTP-6294 The strict_record_tests option is now default; that is, reading a field from a record using the Record#record_tag.field syntax will fail if Record is not a record of the correct type. If necessary, the record tests can be turned off by giving the no_strict_record_tests option. To avoid editing Makefiles, the environment variable ERL_COMPILER_OPTIONS can be set to "no_strict_record_tests". The no_strict_record_tests option will probably be removed in the R12B release. --- dialyzer-1.5.0 ------------------------------------------------------------ OTP-6304 Dialyzer's building of PLT is based on a different type inference algorithm. More specifically, Dialyzer uses inferrence of refined success typings to infer function prototypes. As a result, Dialyzer bases its analysis on a significantly more powerful basis and thus is able to detect more discrepancies. The downside is that building the PLT is a considerably slower process. We will work on improving that. Dialyzer takes into account the BEAM compiler directive -compile({nowarn_unused_function, {F,A}}). and then suppresses the warning that function F/A will never be called. Dialyzer's default initial PLT now also includes "mnesia". --- erl_interface-3.5.5.2 ------------------------------------------------------------ OTP-6216 The combination of xeon processors with 64bit x86 extensions and a 32bit linux could cause ei_decode_long and ei_decode_longlong to fail for the value LONG_MIN and LONGLONG_MIN. The conversion is now made more portable. --- erts-5.5.1.1 ------------------------------------------------------------ OTP-6249 There is now an option read_packets for UDP sockets that sets the maximum number of UDP packets that will be read for each invocation of the socket driver. --- erts-5.5.2 ------------------------------------------------------------ OTP-6160 Exit signals are now truly asynchronous in the runtime system with SMP support. This simplifies locking in bifs a lot, and makes process termination cheaper. OTP-6205 When tracing on the runtime system with SMP support it can be difficult to know when a trace has been delivered to the tracer. A new built in function erlang:trace_delivered/1 has been introduced in order to make it easier to know when the trace has been delivered. See the erlang(3) man page for more information. OTP-6218 erlc: A typo in the help text for '-pa path' was corrected. OTP-6222 Kernel poll support can now be combined with SMP support. Currently the following kernel poll versions exist: /dev/poll, epoll, and kqueue. Linux kpoll has been replaced with epoll. Some time in the future there will also be a kernel poll version using Solaris event ports. The "check io" implementation for unix has been completely rewritten. The current kernel poll implementation reduce the amount of system calls needed compared to the old kernel poll implementation. When epoll or kqueue is used either poll or select is used as fallback. Previously only poll could be used as fallback. Since select now can be used as fallback, kernel poll support is now also available on newer MacOSX. Note however, when select is used as fallback, the maximum number of file descriptors is limited to FD_SETSIZE. Kernel poll support is now enabled by default if /dev/poll, epoll, or kqueue is found when building OTP, i.e. you do not have to pass the --enable-kernel-poll argument to configure. As before, kernel poll is disabled by default in the runtime system. In order to enable it, pass the +Ktrue command line argument to erl. Note: configure will refuse to enable kernel poll support on FreeBSD since kqueue have problems with (at least) pipes on all version of FreeBSD that we have tested. OTP-6224 Failure in port command/control driver callbacks could crash the non-SMP emulator. This bug was introduced in the 5.5 version of erts. OTP-6229 Erroneous "Input driver gone away without deselecting!" error reports could sometimes occur when a driver instance terminated in the ready_output() callback of the driver. This bug was only present in emulators that used poll(). Note, that this bug was harmless, the only effect it had was the erroneous error report. OTP-6234 The erl_ddll module and the code in the emulator have been completely rewritten; several bugs were fixed. OTP-6235 The emulator could cause a type assertion failure while writing an erl_crash.dump, causing the erl_crash.dump to be terminated and a core dump generated. OTP-6237 The registered name of a process is now the last observable resource removed before links and monitors are triggered when a process terminates. Previously ets tables were removed after the registered name. This could cause problems on the runtime system with SMP support for code that expected that ets tables owned by a specific process had been removed if the name of the process had been removed. OTP-6241 Failure to fork() a new (os) process could cause the emulator to deadlock. This bug affect all emulators with SMP support, and emulators with async thread support on SunOS. OTP-6246 Fprof traces could become truncated for the SMP emulator. This bug has now been corrected. OTP-6252 The SMP emulator now avoids locking for the following operations (thus making them as fast as in the UP emulator): atom_to_list/1, atom comparision, atom hashing, erlang:apply/3. OTP-6255 The undocumented functions inet:getiflist/0,1 inet:ifget/2,3 and inet:getif/1 were completely broken on Windows. That has been fixed. OTP-6258 Behavior in case of disappeared nodes when using the dist_auto_connect once got changed in R11B-1. The timeouts regarding normal distributed operationes is now reverted to the old (pre R11B-1). OTP-6259 The bsl and bsr operators could cause the emulator to crash if given invalid arguments. (Thanks to datacompboy and Per Gustafsson.) OTP-6261 driver_cancel_timer() could under certain circumstances fail to cancel the timer on the runtime system with SMP support. OTP-6268 A call to erlang:system_info(info) could deadlock the runtime system with SMP support. OTP-6281 There are new BIFs erlang:spawn_monitor/1,3, and the new option monitor for spawn_opt/2,3,4,5. The observer_backend module has been updated to handle the new BIFs. --- hipe-3.6.0 ------------------------------------------------------------ OTP-6305 Support for native code on Solaris 10/AMD64. Support for native code on FreeBSD/AMD64. Native code now handles external funs (fun M:F/A). Native code can now also apply so-called tuple-funs ({M,F}). (Tuple funs are NOT recommended for new code; they are deprecated and will be removed in some future release.) --- inets-4.7.6 ------------------------------------------------------------ OTP-5527 [httpc] - Added feature to send header values as they where typed by the user of the client. Note that the http standard requires them to be case insensative. This feature should only be used if there is no other way to communicate with the server or for testing purpose. OTP-5677 [httpc] - The parsing of uri's was rewritten so that it should handle all types of uri's including ipv6 uri's. OTP-6005 [httpc, httpd] - Extensions and trailers where not properly handled by the chunk decoding implementation. OTP-6243 [httpc] - A request resulting in an empty body is now returned without any delays. OTP-6244 [httpc] - When http:request/4 was used with a configured proxy, and the webserver returns 3XX code, http:request/4 entered an endless loop. Two problems was solved in this area, the absolute uri is now updated when a redirect is issued, so that the problem in this case will not arise, and the redirection endless loop detection was fixed so that will actually detect potential endless loops. OTP-6263 [httpc] - When using asynchronous HTTP-request it is now possible to receive "200-responses" as streams instead of having to wait until the whole response has been delivered. It also possible to stream "200-response bodys" to a file both for synchronous and asynchronous requests. OTP-6264 [httpc, httpd] - In some cases if a body contained the sequence "\r\n0" and was chunked encoded this sequence was incorrectly interpreted as the last chunk. OTP-6274 [httpc, httpd] - http_request.erl didn't handle https URIs, which meant that redirects from ESI did not work. OTP-6279 [httpc, httpd] - The base 64 decoder was missing a guard so that invalid input lead to an emulator crash instead of a function clause as expected. Also the http server has been improved to handle the function clause error returning a bad credentials reply to the client. OTP-6280 [httpc] - Added option to generate Proxy-Authorization header from provided proxy username and password. OTP-6283 [httpc] - Changed internal default value as it sometimes would be interpreted incorrectly causing the client to return an incomplete body. OTP-6297 [httpc] - Handling of 30X codes was changed so that it works according to the documentation. For instance 301 and 302 codes will not be automatically redirected. OTP-6303 [httpc] - A bug in the pipeline-handling code could cause a response to be sent to the client with an incorrect request id. --- kernel-2.11.1.1 ------------------------------------------------------------ OTP-6249 There is now an option read_packets for UDP sockets that sets the maximum number of UDP packets that will be read for each invocation of the socket driver. --- kernel-2.11.2 ------------------------------------------------------------ OTP-6245 Code cleanup: the old internal obsolete file_server has been removed. It was only used when communicating with R7 and older nodes. OTP-6258 Behavior in case of disappeared nodes when using the dist_auto_connect once got changed in R11B-1. The timeouts regarding normal distributed operationes is now reverted to the old (pre R11B-1). OTP-6278 Trying to open a non-existent or badly formed disk log no longer results in a crash report. In particular, ets:file2tab/1 reports no error when the argument is not a well-formed disk log file. (The return value has not been changed, it is still an error tuple.) OTP-6281 There are new BIFs erlang:spawn_monitor/1,3, and the new option monitor for spawn_opt/2,3,4,5. The observer_backend module has been updated to handle the new BIFs. OTP-6286 Start-up problems for the internal process used by the inet:gethostbyname() functions were eliminated. If the internal process (inet_gethost_native) had not previously been started, and if several processes at the same time called one of the inet:gethostbyname() functions, the calls could fail. OTP-6295 To help Dialyzer find more bugs, many functions in the Kernel and STDLIB applications now only accept arguments of the type that is documented. For instance, the functions lists:prefix/2 and lists:suffix/2 are documented to only accept lists as their arguments, but they actually accepted anything and returned false. That has been changed so that the functions cause an exception if one or both arguments are not lists. Also, the string:strip/3 function is documented to take a character argument that is a character to strip from one or both ends of the string. Given a list instead of a character, it used to do nothing, but will now cause an exception. Dialyzer will find most cases where those functions are passed arguments of the wrong type. --- megaco-3.4.4 ------------------------------------------------------------ OTP-6217 There was still one case when "pending limit exceeded" was reported as a message error instead of transaction error. This has been fixed. OTP-6219 Improved documentation of megaco:call return values. --- megaco-3.4.5 ------------------------------------------------------------ OTP-6275 MG receiving a request, when the reply to the service-change has not yet been received (505) (either because it's been lost or because the MGC is erroneous). This will now result in a call to handle_trans_reply with the UserReply: {error, timeout}. --- megaco-3.4.6 ------------------------------------------------------------ OTP-6276 When replies arrive during a call to megaco:cancel there is a raise condition possibillity. This has been eliminated. --- megaco-3.5 ------------------------------------------------------------ OTP-6223 All error/warning messages from the megaco application will be tagged in such a way that they will be easy to identify (and search for in logs). OTP-6253 The allowed return values of the send_message function of the megaco_transport callback module has been extended (to allow the transport module to cancel the message sending), see the reference manual for more info. OTP-6256 A minor problem related to the passage of the pending limit could potentially prevent the reply info to be retained when it should have been removed. Also, the user will not be informed about the passing of the pending limit in this special case. --- mnesia-4.3.3 ------------------------------------------------------------ OTP-6298 Mnesia could crash during startup when loading tables from remote node. OTP-6299 Mnesia could fail to update all copies during del_table_copy. OTP-6300 Rearranging fragmented tables is an O(N^2) operation. --- observer-0.9.7.1 ------------------------------------------------------------ OTP-6301 Crash dump with large integers could crash the crashdump_viewer. --- runtime_tools-1.6.1 ------------------------------------------------------------ OTP-6281 There are new BIFs erlang:spawn_monitor/1,3, and the new option monitor for spawn_opt/2,3,4,5. The observer_backend module has been updated to handle the new BIFs. --- sasl-2.1.4 ------------------------------------------------------------ OTP-6226 Added an option {outdir,Dir} to the functions in systools, making it possible to specify in which directory a boot script, relup file or release package file should be placed. Also, when using systools:make_tar/2 to create a release package file, the boot script, relup file and sys.config are now searched for also in the current working directory and any directory specified by the path option, not only in the directory of the .rel file. As part of the work some minor bugs have been corrected: * systools:make_script/1,2 now returns error if the .script and/or .boot file could not be opened for writing, not ok. * systools:make_tar/1,2 can now handle a RelName argument which includes a path. Previously this would cause the .rel file to end up in the wrong directory in the resulting tar file. * A documentation error for systools:make_tar/1,2: The .rel file is placed in the releases directory in the tar file, not releases/RelVsn. --- snmp-4.8.2 ------------------------------------------------------------ OTP-6214 Add timestamp to the verbosity printouts. OTP-6247 A badly formatted debug printout caused console printouts. --- ssh-0.9.5 ------------------------------------------------------------ OTP-6231 The data window in SSH wasn't resized in the ssh_cli receive data, this made the ssh_cli-server hang if more than 64K data was received at one time. The option tcp_nodelay was added, for nodelay in tcp connections. --- stdlib-1.14.2 ------------------------------------------------------------ OTP-6038 Support for faster join of two tables has been added to the qlc module. There are two kinds of fast joins: lookup join that uses existing indices, and merge join that takes two sorted inputs. There is a new join option that can be used to force QLC to use a particular kind of join in some QLC expression. Several other changes have also been included: The new tmpdir option of cursor/2, eval/2, fold/4, and info/2 can be used to set the directory that join uses for temporary files. The option also overrides the tmpdir option of keysort/3 and sort/2. The new lookup option can be used to assert that constants are looked up when evaluating some QLC expression. The cache and cache_all options accept new tags: ets, list, and no. The tag list caches answers in a list using a temporary file if the answers cannot be held in RAM. Combining {cache,list} and {unique, true} is equivalent to calling sort/2 with the option unique set to true. The old tags true (equivalent to ets) and false (equivalent to no) are recognized for backward compatibility. The new option max_list_size can be used to set the limit where merge join starts to use temporary files for large equivalence classes and when answers cached in lists are put on temporary files. There is a new callback is_sorted_key to be supplied as an option to table/2. QLC analyzes each and every QLC expression when trying to find constants for the lookup function. Hitherto only QLC expressions with exactly one generator were analyzed. Note that only filters with guard syntax placed immediately after the generator are analyzed. The restriction to guard filters is an incompatible change. See qlc(3) for further details. In a similar way several match specifications for traversal of QLC tables can be utilized for different generators of one single QLC expression. A bug has been fixed: when caching answers to a sufficiently complex query it could happen that some answers were not returned. OTP-6227 The Erlang pretty printer (erl_pp) is now much faster when the code is deeply nested. A few minor bugs have been fixed as well. OTP-6230 The control sequences p and P of the Format argument of the functions io:format/2,3 and io_lib:format/2 did not handle binaries very well. This bug, introduced in stdlib-1.14, has been fixed. OTP-6239 The Erlang shell now tries to garbage collect large binaries. Under certain circumstances such binaries could otherwise linger on for an indefinite amount of time. OTP-6271 filelib:wildcard(Wc, PathWithRedundantSlashes), where PathWithRedundantSlashes is a directory path containing redundant slashes, such as /tmp/ or //tmp, could return incorrect results. (Thanks to Martin Bjorklund.) OTP-6277 The Erlang code preprocessor crashed if the predefined macros ?MODULE or ?MODULE_STRING were used before the module declaration. This bug has been fixed. OTP-6295 To help Dialyzer find more bugs, many functions in the Kernel and STDLIB applications now only accept arguments of the type that is documented. For instance, the functions lists:prefix/2 and lists:suffix/2 are documented to only accept lists as their arguments, but they actually accepted anything and returned false. That has been changed so that the functions cause an exception if one or both arguments are not lists. Also, the string:strip/3 function is documented to take a character argument that is a character to strip from one or both ends of the string. Given a list instead of a character, it used to do nothing, but will now cause an exception. Dialyzer will find most cases where those functions are passed arguments of the wrong type. --- tools-2.5.2 ------------------------------------------------------------ OTP-6246 Fprof traces could become truncated for the SMP emulator. This bug has now been corrected.