Major relese : otp_src_R14B Build date : 2010-09-15 R14B is a major new release of Erlang/OTP. You can download the full source distribution from http://www.erlang.org/download/otp_src_R14B.tar.gz http://www.erlang.org/download/otp_src_R14B.readme (this file) Note: To unpack the TAR archive you need a GNU TAR compatible program. 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_R14B.exe 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_R14B.tar.gz http://www.erlang.org/download/otp_doc_man_R14B.tar.gz We also want to thank those that sent us patches, suggestions and bug reports, The OTP Team --- HIGHLIGHTS ---------------------------------------------------------- OTP-8544 == erts stdlib == Large parts of the ethread library have been rewritten. The ethread library is an Erlang runtime system internal, portable thread library used by the runtime system itself. Most notable improvement is a reader optimized rwlock implementation which dramatically improve the performance of read-lock/read-unlock operations on multi processor systems by avoiding ping-ponging of the rwlock cache lines. The reader optimized rwlock implementation is used by miscellaneous rwlocks in the runtime system that are known to be read-locked frequently, and can be enabled on ETS tables by passing the {read_concurrency, true} option upon table creation. See the documentation of ets:new/2 for more information. The reader optimized rwlock implementation can be fine tuned when starting the runtime system. For more information, see the documentation of the +rg command line argument of erl. There is also a new implementation of rwlocks that is not optimized for readers. Both implementations interleaves readers and writers during contention as opposed to, e.g., the NPTL (Linux) pthread rwlock implementation which use either a reader or writer preferred strategy. The reader/writer preferred strategy is problematic since it starves threads doing the non-preferred operation. The new rwlock implementations in general performs better in ERTS than common pthread implementations. However, in some extremely heavily contended cases this is not the case. Such heavy contention can more or less only appear on ETS tables. This when multiple processes do very large amounts of write locked operations simultaneously on the same table. Such use of ETS is bad regardless of rwlock implementation, will never scale, and is something we strongly advise against. The new rwlock implementations depend on atomic operations. If no native atomic implementation is found, a fallback solution will be used. Using the fallback implies a performance degradation. That is, it is more important now than before to build OTP with a native atomic implementation. The ethread library contains native atomic implementations for, x86 (32 and 64 bit), powerpc (32 bit), sparc V9 (32 and 64 bit), and tilera (32 bit). On other hardware gcc's builtin support for atomic memory access will be used if such exists. If no such support is found, configure will warn about no atomic implementation available. The ethread library can now also use the libatomic_ops library for atomic memory accesses. This makes it possible for the Erlang runtime system to utilize optimized native atomic operations on more platforms than before. If configure warns about no atomic implementation available, try using the libatomic_ops library. Use the --with-libatomic_ops=PATH configure command line argument when specifying where the libatomic_ops installation is located. The libatomic_ops library can be downloaded from: http://www.hpl.hp.com/research/linux/atomic_ops/ The changed API of the ethread library has also caused modifications in the Erlang runtime system. Preparations for the to come "delayed deallocation" feature has also been done since it depends on the ethread library. Note: When building for x86, the ethread library will now use instructions that first appeared on the pentium 4 processor. If you want the runtime system to be compatible with older processors (back to 486) you need to pass the --enable-ethread-pre-pentium4-compatibility configure command line argument when configuring the system. OTP-8763 == stdlib == Some Built In Functions (BIFs) from the module erlang was never made autoimported for backward compatibility reasons. As local functions now override autoimports, new autoimports is no longer a problem, why the following BIFs are finally made autoimported: monitor/2, monitor/3, demonitor/2, demonitor/3, error/1, error/2, integer_to_list/2, list_to_integer/2. --- otp ----------------------------------------------------------------- OTP-8601 Fix that the system documentation can be built from both a source and release structure. OTP-8733 reference() has been substituted for ref() in the documentation. OTP-8756 Building for multiple targets in the same source tree previously failed since the bootstrap/{erl,erlc} files only were generated during the first build. The bootstrap/{erl,erlc} files are now regenerated when switching target. OTP-8786 The highlight and incompatibility links on the front page of the documentationhave been removed. --- appmon-2.1.13 ------------------------------------------------------- OTP-8839 An obsolete compiler directive for native code generation was removed from a source file. --- asn1-1.6.14.1 ------------------------------------------------------- OTP-8598 Extension Addition Groups are now supported by the parser and in all backends. OTP-8779 Bug in UNALIGNED PER regarding encoding and decoding of constrained numbers with a valuerange > 1024. (Thanks to Vincent de Phily) OTP-8797 Extension Addition Groups are now supported in nested types within a SEQUENCE and CHOICE as well (missed that in previous fix) OTP-8829 Minor corrections in the User Guide. --- common_test-1.5.1 --------------------------------------------------- OTP-8725 Common Test has been updated to handle start options and test specification terms for test case groups (and test cases in groups). Also, an option named 'label', has been added that associates the test run with a name that Common Test prints in the overview HTML logs. OTP-8753 Returning {return_group_result,failed} from end_per_group in a group that is part of a sequence, did not cause the proceeding cases (or groups) to get skipped. This has been fixed. OTP-8803 Andrey Pampukha has been added to the AUTHORS file. Thank you Andrey for your work on configuration data handling, Large Scale Testing improvements, and other useful updates and fixes. OTP-8804 The Configuration Data chapter in the User's Guide has been updated. OTP-8808 Milliseconds are now included in timestamps in Common Test log entries. (Thanks to Tomas Johansson.) OTP-8818 ct:install now works as the documentation describes. --- compiler-4.7.1 ------------------------------------------------------ OTP-8840 Eliminated warnings for auto-imported BIF clashes. --- crypto-2.0.1 -------------------------------------------------------- OTP-8718 Crypto dialyzer type error in md5_mac and sha_mac. OTP-8760 Added erlang:system_info(build_type) which makes it easier to chose drivers, NIF libraries, etc based on build type of the runtime system. The NIF library for crypto can now be built for valgrind and/or debug as separate NIF libraries that will be automatically loaded if the runtime system has been built with a matching build type. OTP-8781 RC4 stream cipher didn't work. This since the new NIF implementation of crypto:rc4_encrypt_with_state/2 introduced in crypto-2.0 didn't return an updated state. (Thanks to Paul Guyot) OTP-8810 A number of memory leaks in the crypto NIF library have been fixed. --- debugger-3.2.4 ------------------------------------------------------ OTP-8757 Type specs have been added/cleaned up. (Thanks to Kostis Sagonas.) --- dialyzer-2.3.1 ------------------------------------------------------ OTP-8840 Eliminated warnings for auto-imported BIF clashes. --- docbuilder-0.9.8.8 -------------------------------------------------- OTP-8784 Fixed problem with a centered table that was transformed into an xml document which then produced mis-formatted html. --- edoc-0.7.6.7 -------------------------------------------------------- OTP-8749 Edoc now uses the new API functions to inets instead of the deprecated ones. --- erl_docgen-0.2.2 ---------------------------------------------------- OTP-8792 Fixed the transformation from xml to html of the funcs block in comref pages. --- erl_interface-3.7.1 ------------------------------------------------- OTP-8748 Removed unused variable in ei_decode_term.c. Fixed faulty deallocation in erl_call. OTP-8813 ei_connect: correct man page examples (Thanks to Michael Santos) OTP-8814 ei: prevent overflow in ei_connect_init and ei_xconnect Add length check of the buffer before copying. (Thanks to Michael Santos) OTP-8826 Remove DECLSPEC feature which fails on Windows Vista and use the fallback implementation instead. OTP-8827 erl_call: fix multiple buffer overflows (Thanks to Michael Santos) OTP-8837 Fix incorrect writev iovec buffer handling in erl_interface (Thanks to Steve Vinoski) --- erts-5.8.1 ---------------------------------------------------------- OTP-7178 Very small floating point numbers generated errors when converting from list to float in some versions of the VM, this is now corrected so that i.e. list_to_float("1.0e-324"). returns 0.0 in all versions of Erlang. OTP-7405 Windows Vista and Windows 7 file system virtualization, which makes "old style" windows programs execute in a file system sandbox, was previously unintentionally turned on for the Erlang VM. This is now corrected so that i.e. writes to C:\Program Files\. without administrator privileges will fail. OTP-7863 ets:select_reverse/{1,2,3} are now documented. OTP-8540 External format of integers changed to make full use of all 32 bits of INTEGER_EXT. This is a compatible change as old code can read full 32-bit integers but only produce 28-bit integers as INTEGER_EXT. OTP-8544 Large parts of the ethread library have been rewritten. The ethread library is an Erlang runtime system internal, portable thread library used by the runtime system itself. Most notable improvement is a reader optimized rwlock implementation which dramatically improve the performance of read-lock/read-unlock operations on multi processor systems by avoiding ping-ponging of the rwlock cache lines. The reader optimized rwlock implementation is used by miscellaneous rwlocks in the runtime system that are known to be read-locked frequently, and can be enabled on ETS tables by passing the {read_concurrency, true} option upon table creation. See the documentation of ets:new/2 for more information. The reader optimized rwlock implementation can be fine tuned when starting the runtime system. For more information, see the documentation of the +rg command line argument of erl. There is also a new implementation of rwlocks that is not optimized for readers. Both implementations interleaves readers and writers during contention as opposed to, e.g., the NPTL (Linux) pthread rwlock implementation which use either a reader or writer preferred strategy. The reader/writer preferred strategy is problematic since it starves threads doing the non-preferred operation. The new rwlock implementations in general performs better in ERTS than common pthread implementations. However, in some extremely heavily contended cases this is not the case. Such heavy contention can more or less only appear on ETS tables. This when multiple processes do very large amounts of write locked operations simultaneously on the same table. Such use of ETS is bad regardless of rwlock implementation, will never scale, and is something we strongly advise against. The new rwlock implementations depend on atomic operations. If no native atomic implementation is found, a fallback solution will be used. Using the fallback implies a performance degradation. That is, it is more important now than before to build OTP with a native atomic implementation. The ethread library contains native atomic implementations for, x86 (32 and 64 bit), powerpc (32 bit), sparc V9 (32 and 64 bit), and tilera (32 bit). On other hardware gcc's builtin support for atomic memory access will be used if such exists. If no such support is found, configure will warn about no atomic implementation available. The ethread library can now also use the libatomic_ops library for atomic memory accesses. This makes it possible for the Erlang runtime system to utilize optimized native atomic operations on more platforms than before. If configure warns about no atomic implementation available, try using the libatomic_ops library. Use the --with-libatomic_ops=PATH configure command line argument when specifying where the libatomic_ops installation is located. The libatomic_ops library can be downloaded from: http://www.hpl.hp.com/research/linux/atomic_ops/ The changed API of the ethread library has also caused modifications in the Erlang runtime system. Preparations for the to come "delayed deallocation" feature has also been done since it depends on the ethread library. Note: When building for x86, the ethread library will now use instructions that first appeared on the pentium 4 processor. If you want the runtime system to be compatible with older processors (back to 486) you need to pass the --enable-ethread-pre-pentium4-compatibility configure command line argument when configuring the system. OTP-8580 erlang:localtime_to_universaltime({{2008, 8, 1}, {0, 0, 0}},true) when TZ=UTC now behaves consistently on all Unix platforms. The problem fixed was originally reported by Paul Guyot on erlang-bugs mailing list: http://www.erlang.org/pipermail/erlang-bugs/2008-November/001 077.html OTP-8716 Fix faulty 64-bit integer term output from drivers. Large 64-bits integers did not generate correct bignums and could even cause emulator crash. Only affects drivers using ERL_DRV_INT64 or ERL_DRV_UINT64, introduced in R13B03. OTP-8726 Fixed: inet:setopts(S, [{linger,{true,2}}]) returned {error,einval} for SCTP sockets. The inet_drv had a bug when checking the option size. OTP-8728 Fix libm linking with --as-needed flag When building with "--as-needed" linker flags on Linux the build will fail. This has now been fixed. (Thanks to Christian Faulhammer) OTP-8729 gen_udp:connect/3 was broken for SCTP enabled builds. It did not detect remote end errors as it should. OTP-8730 Reduce the risk of integer wrapping in bin vheap size counting. The vheap size series will now use the golden ratio instead of doubling and fibonacci sequences. OTP-8732 ETS ordered_set containing [] as key could cause strange thing to happen, like an infinite hanging ets:select. OTP-8733 reference() has been substituted for ref() in the documentation. OTP-8736 When a native compiled module called a not loaded non-native compiled module that had an on_load function, the export entries were trashed after code loading so on the next call from the native compiled module to the non-native compiled the emulator crashed. This bug has now been fixed. OTP-8737 Optimization reducing memory consumption by two words per ETS object. OTP-8745 Fixes for unsupported halfword-emulator OTP-8746 NIF 64-bit integer support; enif_get_int64, enif_get_uint64, enif_make_int64, enif_make_uint64. OTP-8754 Alignment of trailing data in messages has been adjusted. This in order to be able to pass data of any type as trailing data in the future. OTP-8758 The obsolete/driver.h header file has been removed. It has been obsolete and deprecated since R8B. Drivers that still include obsolete/driver.h must be updated to include erl_driver.h. OTP-8760 Added erlang:system_info(build_type) which makes it easier to chose drivers, NIF libraries, etc based on build type of the runtime system. The NIF library for crypto can now be built for valgrind and/or debug as separate NIF libraries that will be automatically loaded if the runtime system has been built with a matching build type. OTP-8762 Further lessened the memory requirements of ETS objects. OTP-8764 The broken elib_malloc alternate memory allocator has been removed. erlang:system_info(elib_malloc) will always return false, and in R15, erlang:system_info(elib_malloc) will fail with a badarg exception. OTP-8765 Calling erlang:system_info/1 with the new argument update_cpu_info will make the runtime system reread and update the internally stored CPU information. For more information see the documentation of erlang:system_info(update_cpu_info). The CPU topology is now automatically detected on Windows systems with less than 33 logical processors. The runtime system will now, also on Windows, by default bind schedulers to logical processors using the default_bind bind type if the amount of schedulers is at least equal to the amount of logical processors configured, binding of schedulers is supported, and a CPU topology is available at startup. OTP-8769 HiPE-enabled Erlang VMs running on BSD systems sometimes generated messages like "Yikes! erts_alloc() returned misaligned address 0x8016a512c". Fixed. (Thanks to Mikael Pettersson.) OTP-8773 A race condition in erts_poll() could cause delay of poll for I/O. OTP-8774 The SMP ERTS internal child waiter thread used on Linux system with NPTL was unintentionally disabled during cross compilation rewrites (OTP-8323 in R13B03). It has now been re-enabled. Enabling it again gives a slight performance improvement. OTP-8775 epmd used to generate a message to the syslog when it started up, which could be annoying. This has been changed to only generate the message if the debug swith is given. (Thanks to Michael Santos.) OTP-8780 Removed some potential vulnerabilities from the Erlang Port Mapper Daemon (epmd) and straightened up access control. Also removed hazardous interfaces allowing anyone on a machine to forcefully unregister other nodes. This means that the ei_unregister/erl_unregister interfaces in erl_interface is rendered not only error prone and mystifying as before, but totally ineffective. The old behaviour of unchecked node unregistering can be restored if needed, see epmd documentation for details. OTP-8791 Building in a source tree without prebuilt platform independent build results failed on the SSL examples when: cross building. This has been solved by not building the SSL examples during a cross build. building on Windows. OTP-8795 inet:getsockopt for SCTP sctp_default_send_param had a bug to not initialize required feilds causing random answers. It is now corrected. OTP-8798 The hipe_bifs:get_hrvtime/0 BIF now always returns a real value even if the "perfctr" Linux kernel extension is not available. It used to return a dummy value. (Thanks to Mikael Pettersson.) OTP-8799 Calling a native-code compiled module with an on_load function could cause a crash. (Thanks to Mikael Pettersson.) OTP-8801 The emulator could crash while writing a crash dump if native-compiled modules had been loaded. (Thanks to Paul Guyot.) OTP-8811 The scheduler wakeup threshold is now possible to adjust at system boot. For more information see the +swt command line argument of erl. OTP-8816 The undocumented function inet:ifget/2 has been improved to return interface hardware address (MAC) on platforms supporting getaddrinfo() (such as BSD unixes). Note it still does not work on all platforms for example not Windows nor Solaris, so the function is still undocumented. Buffer overflow and field init bugs for inet:ifget/2 and inet:getservbyname/2 has also been fixed. Thanks to Michael Santos. OTP-8821 The garbage collector could crash if invoked from native-compiled code after a call to a BIF. (Thanks to Paul Guyot.) OTP-8823 A rare memory leak in binary:matches is removed OTP-8831 For a socket in the HTTP packet mode, the return value from gen_tcp:recv/2,3 if there is an error in the header will be {ok,{http_error,String}} instead of {error,{http_error,String}} to be consistent with ssl:recv/2,3. OTP-8834 Optimizations for MIPS when using gcc atomics. (Thanks to Steve Vinoski) OTP-8835 Lock optimization in timer functionality. --- et-1.4.1 ------------------------------------------------------------ OTP-8796 Fixed broken links in the documentation. OTP-8830 Fixed gui crash on windows. --- gs-1.5.13 ----------------------------------------------------------- OTP-8824 The documentation for GS is updated with the warning that it should not be used in new applications. GS is planned to be deprecated soon and might be removed from the distribution already in the next major release (R15). For graphical applications we recommend the use of WX instead. --- hipe-3.7.7 ---------------------------------------------------------- OTP-8800 The HiPE compiler could crash when compiling certain modules (the bug has been latent, and been exposed by new optimizations introduced in the BEAM compiler in R14A). (Thanks to Mikael Pettersson.) OTP-8802 hipe:load/1 was broken. (Thanks to Paul Guyot.) --- inets-5.5 ----------------------------------------------------------- OTP-8739 [httpc] If a request times out (not connect timeout), the handler process exited (normal) but neglected to inform the manager process. For this reason, the manager did not clean up the request table., resulting in a memory leak. Also the manager did not create a monitor for the handler, so in an unforseen handler crash, this could also create a memory leak. OTP-8741 The service tftp was spelled wrong in documentation and in some parts of the code. It should be tftp. OTP-8742 [httpc] Replaced the old http client api module (http) with the new, httpc in the users guide. OTP-8840 Eliminated warnings for auto-imported BIF clashes. OTP-8844 Fixing auto-import issues. --- inviso-0.6.2 -------------------------------------------------------- OTP-8747 The obsolete guards has now been changed to the new guard interface. --- jinterface-1.5.3.1 -------------------------------------------------- OTP-8841 An pom.xml file is now generated. (Thanks to Gabor Liptak.) --- kernel-2.14.1 ------------------------------------------------------- OTP-8726 Fixed: inet:setopts(S, [{linger,{true,2}}]) returned {error,einval} for SCTP sockets. The inet_drv had a bug when checking the option size. OTP-8729 gen_udp:connect/3 was broken for SCTP enabled builds. It did not detect remote end errors as it should. OTP-8733 reference() has been substituted for ref() in the documentation. OTP-8750 Even when configuring erlang with --enable-native-libs, the native code for modules loaded very early (such as lists) would not get loaded. This has been corrected. (Thanks to Paul Guyot.) OTP-8787 A bug introduced in kernel-2.13.5.3 has been fixed. If running net_kernel:set_net_ticktime/1 twice within the TransitionPerod the second call caused the net_kernel process to crash with a badmatch. OTP-8795 inet:getsockopt for SCTP sctp_default_send_param had a bug to not initialize required feilds causing random answers. It is now corrected. OTP-8816 The undocumented function inet:ifget/2 has been improved to return interface hardware address (MAC) on platforms supporting getaddrinfo() (such as BSD unixes). Note it still does not work on all platforms for example not Windows nor Solaris, so the function is still undocumented. Buffer overflow and field init bugs for inet:ifget/2 and inet:getservbyname/2 has also been fixed. Thanks to Michael Santos. OTP-8822 As a usability improvement the 'inet6' option to functions gen_tcp:listen/2, gen_tcp:connect/3-4, gen_udp:open/2 and gen_sctp:open/1-2 is now implicit if the address argument or the 'ip' option contain an IPv6 address (8-tuple). OTP-8831 For a socket in the HTTP packet mode, the return value from gen_tcp:recv/2,3 if there is an error in the header will be {ok,{http_error,String}} instead of {error,{http_error,String}} to be consistent with ssl:recv/2,3. --- megaco-3.15 --------------------------------------------------------- OTP-8842 Fixing auto-import issues. --- mnesia-4.4.15 ------------------------------------------------------- OTP-8840 Eliminated warnings for auto-imported BIF clashes. --- orber-3.6.17 -------------------------------------------------------- OTP-8840 Eliminated warnings for auto-imported BIF clashes. --- parsetools-2.0.4 ---------------------------------------------------- OTP-8771 Running HiPE-compiled Yecc parsers no longer results in a function_clause error. --- public_key-0.8 ------------------------------------------------------ OTP-8722 Revise the public_key API - Cleaned up and documented the public_key API to make it useful for general use, also changed ssl to use the new API. OTP-8788 Handling of unknown CA certificates was changed in ssl and public_key to work as intended. OTP-8825 Added the functionality so that the verification fun will be called when a certificate is considered valid by the path validation to allow access to each certificate in the path to the user application. Also try to verify subject-AltName, if unable to verify it let the application verify it. --- runtime_tools-1.8.4.1 ----------------------------------------------- OTP-8755 Minor corrections and removal of a temporary workaround. OTP-8783 Small fix in inviso_autostart_server. --- sasl-2.1.9.2 -------------------------------------------------------- OTP-8619 In R13B04 sys:get_status was modified to invoke format_status/2 in the callback module if the module exports that function. This resulted in a change to the term returned from calling sys:get_status on the supervisor module, since supervisor is a gen_server and gen_server exports format_status. The sasl release_handler_1 module had a dependency on the pre-R13B04 term returned by sys:get_status when invoked on a supervisor, so the R13B04 change broke that dependency. This problem has been fixed by change release_handler_1 to handle both the pre-R13B04 and R13B04 terms that sys:get_status can return from a supervisor. --- snmp-4.18 ----------------------------------------------------------- OTP-8761 When the function FilterMod:accept_recv/2 returned false the SNMP agent stopped collecting messages from UDP. --- ssh-2.0.1 ----------------------------------------------------------- OTP-8714 SSH in some cases terminated channels with reason normal when it should have been shutdown. OTP-8735 SSH in some cases generated a crash report when a channel was closed in a normal way. OTP-8807 The processes ssh_subsystem_sup and one ssh_channel_sup was not terminated when a connection was closed. --- ssl-4.0.1 ----------------------------------------------------------- OTP-8721 The server now verifies the client certificate verify message correctly, instead of causing a case-clause. OTP-8722 Revise the public_key API - Cleaned up and documented the public_key API to make it useful for general use, also changed ssl to use the new API. OTP-8723 Added support for inputing certificates and keys directly in DER format these options will override the pem-file options if specified. OTP-8740 To gain interoperability ssl will not check for padding errors when using TLS 1.0. It is first in TLS 1.1 that checking the padding is an requirement. OTP-8770 Changed the semantics of the verify_fun option in the ssl-application so that it takes care of both application handling of path validation errors and verification of application specific extensions. This means that it is now possible for the server application in verify_peer mode to handle path validation errors. This change moved some functionality earlier in ssl to the public_key application. OTP-8772 The client hello message now always include ALL available cipher suites (or those specified by the ciphers option). Previous implementation would filter them based on the client certificate key usage extension (such filtering only makes sense for the server certificate). OTP-8785 Fixed handling of the option {mode, list} that was broken for some packet types for instance line. OTP-8790 Empty packets were not delivered to the client. OTP-8791 Building in a source tree without prebuilt platform independent build results failed on the SSL examples when: cross building. This has been solved by not building the SSL examples during a cross build. building on Windows. OTP-8793 Fixed a handshake error which occurred on some ssl implementations. OTP-8825 Added the functionality so that the verification fun will be called when a certificate is considered valid by the path validation to allow access to each certificate in the path to the user application. Also try to verify subject-AltName, if unable to verify it let the application verify it. --- stdlib-1.17.1 ------------------------------------------------------- OTP-6759 The ms_transform now warns if the fun head shadows surrounding variables (just like the warnings you would get for an ordinary fun in the same context). OTP-7863 ets:select_reverse/{1,2,3} are now documented. OTP-8544 Large parts of the ethread library have been rewritten. The ethread library is an Erlang runtime system internal, portable thread library used by the runtime system itself. Most notable improvement is a reader optimized rwlock implementation which dramatically improve the performance of read-lock/read-unlock operations on multi processor systems by avoiding ping-ponging of the rwlock cache lines. The reader optimized rwlock implementation is used by miscellaneous rwlocks in the runtime system that are known to be read-locked frequently, and can be enabled on ETS tables by passing the {read_concurrency, true} option upon table creation. See the documentation of ets:new/2 for more information. The reader optimized rwlock implementation can be fine tuned when starting the runtime system. For more information, see the documentation of the +rg command line argument of erl. There is also a new implementation of rwlocks that is not optimized for readers. Both implementations interleaves readers and writers during contention as opposed to, e.g., the NPTL (Linux) pthread rwlock implementation which use either a reader or writer preferred strategy. The reader/writer preferred strategy is problematic since it starves threads doing the non-preferred operation. The new rwlock implementations in general performs better in ERTS than common pthread implementations. However, in some extremely heavily contended cases this is not the case. Such heavy contention can more or less only appear on ETS tables. This when multiple processes do very large amounts of write locked operations simultaneously on the same table. Such use of ETS is bad regardless of rwlock implementation, will never scale, and is something we strongly advise against. The new rwlock implementations depend on atomic operations. If no native atomic implementation is found, a fallback solution will be used. Using the fallback implies a performance degradation. That is, it is more important now than before to build OTP with a native atomic implementation. The ethread library contains native atomic implementations for, x86 (32 and 64 bit), powerpc (32 bit), sparc V9 (32 and 64 bit), and tilera (32 bit). On other hardware gcc's builtin support for atomic memory access will be used if such exists. If no such support is found, configure will warn about no atomic implementation available. The ethread library can now also use the libatomic_ops library for atomic memory accesses. This makes it possible for the Erlang runtime system to utilize optimized native atomic operations on more platforms than before. If configure warns about no atomic implementation available, try using the libatomic_ops library. Use the --with-libatomic_ops=PATH configure command line argument when specifying where the libatomic_ops installation is located. The libatomic_ops library can be downloaded from: http://www.hpl.hp.com/research/linux/atomic_ops/ The changed API of the ethread library has also caused modifications in the Erlang runtime system. Preparations for the to come "delayed deallocation" feature has also been done since it depends on the ethread library. Note: When building for x86, the ethread library will now use instructions that first appeared on the pentium 4 processor. If you want the runtime system to be compatible with older processors (back to 486) you need to pass the --enable-ethread-pre-pentium4-compatibility configure command line argument when configuring the system. OTP-8733 reference() has been substituted for ref() in the documentation. OTP-8763 Some Built In Functions (BIFs) from the module erlang was never made autoimported for backward compatibility reasons. As local functions now override autoimports, new autoimports is no longer a problem, why the following BIFs are finally made autoimported: monitor/2, monitor/3, demonitor/2, demonitor/3, error/1, error/2, integer_to_list/2, list_to_integer/2. --- test_server-3.4.1 --------------------------------------------------- OTP-8725 Common Test has been updated to handle start options and test specification terms for test case groups (and test cases in groups). Also, an option named 'label', has been added that associates the test run with a name that Common Test prints in the overview HTML logs. OTP-8753 Returning {return_group_result,failed} from end_per_group in a group that is part of a sequence, did not cause the proceeding cases (or groups) to get skipped. This has been fixed. OTP-8805 It is now possible to skip all tests in a suite, or a group, by returning {fail,Reason} from the end_tc/5 framework function for init_per_suite, or init_per_group. --- tools-2.6.6.1 ------------------------------------------------------- OTP-8776 cover will now show ampersand characters in the source code correctly. (Thanks to Tom Moertel.) --- tv-2.1.4.6 ---------------------------------------------------------- OTP-8751 With some window managers (e.g. stumpwm), tv would constantly restart while trying to open a table. (Thanks to Dmitriy Budashny.) --- typer-0.1.7.5 ------------------------------------------------------- OTP-8840 Eliminated warnings for auto-imported BIF clashes. --- wx-0.98.7 ----------------------------------------------------------- OTP-8766 Fix crash (segmentation fault) in callback handling. OTP-8767 Add wxSystemSettings module. Add wxTreeCtrl:editLabel/2. --- xmerl-1.2.6 --------------------------------------------------------- OTP-8697 Fixed problem with hex entities in UTF-8 documents: When a document was in UTF-8 encoding, xmerl_scan improperly replaced hex entities by the UTF-8 bytes instead of returning the character, as it does with inline UTF-8 text and decimal entities. (Thanks to Paul Guyot.)