ACE/TAO/CIAO/DAnCE x.1.4 released
Once again, thanks to the efforts of many developers, testers, and users, we are pleased to announce the micro release of ACE 6.1.4, TAO 2.1.4, CIAO 1.1.4, and DAnCE 1.1.4, which is available from the usual download location under the heading "Latest Micro Release Kit".
Changes to ACE
- Added a new ACE_Time_Value derived template class (Time_Value_T.h): template <class TIME_POLICY> class ACE_Time_Value_T. This template class overloads 4 new virtual methods from the ACE_Time_Value base class to provide time policy aware time values:
- to_relative_time ()
- to_absolute_time ()
- now ()
- duplicate ()
- Updated time policy classes to return ACE_Time_Value_T<> instantiations for the corresponding time policy instead of 'common' time values
- Added new ACE_Monotonic_Time_Policy (Monotonic_Time_Policy.h). This class provides a monotonic time source for supported platforms (Windows and POSIX platforms providing the required clock_gettime() time source; currently verified for Windows and Linux)
- Updated OS_NS_Thread to use the new time policy support in ACE_Time_Value for (relative) time calculations and added new ACE_OS::condattr_setclock () method.
- Added TIME_POLICY support to ACE_Condition_Attributes to allow for monotonic timer support for ACE_Condition
- Added TIME_POLICY support to ACE_Message_Queue-s, ACE_Task-s and related classes to enable support for monotonic timers in the timed wait methods (ACE_Condition based). See docs/ACE-monotonic-timer.html for how to use this.
- Added two new regression tests:
- and updated the Bug_4055_Regression_Test to a fixed state.
Changes to TAO
- CORBA::string_dup() and CORBA::string_free() have been enhanced to use non-allocated and shared static null strings. This allows for optimized default null string initialization in CORBA string members and a reduction in redundant dynamic memory management required for such. This enhancement can be removed via the config.h by including #define TAO_NO_SHARED_NULL_CORBA_STRING. NOTE that it is a (CORBA spec) requirement that all CORBA::strings are deleted via the CORBA::string_free() and allocated via the CORBA::string_dup() or CORBA::string_alloc() calls; you must not use the c++ keywords new and delete directly. Previously it was possible to ignore this requirement, however if you do so now, this enhancement for null strings will catch you out, as deleting these null CORBA::strings will cause corrupt heap and/or segfaults.
- Add support for -ORBPreferredInterfaces option to UIPMC. The form follows the same pattern as IIOP for IPv4 i.e. a local interface IP address should be specified as the mapping. e.g. -ORBPreferredInterfaces 225.*=192.168.0.2. For IPv6 the preferred
interface should (neccessarily) be set as an interface name (e.g. 'eth0' for linux, or 'Loopback Pseudo-Interface' on windows) or an interface index number on windows. e.g. -ORBPreferredInterfaces FF01:*=eth0. Also add support an -ORBListenOnAll 0|1 UIPMCFactory option that can be specified in the svc.conf to make the acceptor listen on all multicast enabled interfaces on platforms that this is not the default. This has been observed to be required for the UIPMCAcceptor to open on the most recent Linux distribs. NOTE that there is an obvious elephant in the room in testing this option, we can't rely on any build/test machine having more than one (or any?) interfaces so the test (TAO/orbsvcs/tests/Miop/McastPreferredInterfaces), such as it is, is relying on side effects which may not hold for all platforms. Additionally the IPv6
behaviour isn't even consistent across platforms and the build machines can't be relied upon to have a 'proper' (non-zero conf link local) IPv6 configuration. Basically, if you want some confidence this is actually working I'd advise testing this option before you use it, running it on a machine with multiple interfaces with the debug level turned up.
- Enhanced the MIOP implementation; this protocol now supports MIOP message fragmentation which is controlled via the new MIOP_Strategy_Factory. For details see the MIOP_Strategy_Factory section in the docs/Options.html document included with this distribution.
Changes to CIAO
- The CIAO DDS4CCM integration with OpenDDS has been reworked in a way that OpenDDS doesn't know anything anymore from CIAO. In order to useDDS4CCM with OpenDDS you need OpenDDS 3.3 or higher.
Changes to DAnCE