This page lists all the changes and fixed bugs in OpenSplice v6.2.x
Regular releases of OpenSplice are made available which contain fixed bugs, changes to supported platforms and new features.
There are two types of release, major releases and minor releases. Upgrading OpenSplice contains more information about the differences between these releases and the impact of upgrading. We advise customers to move to the most recent release in order to take advantage of these changes. This page details all the fixed bugs and changes between different OpenSplice releases. There is also a page which details the new features that are the different OpenSplice releases.
There are two different types of changes. Bug fixes and changes that do not affect the API and bug fixes and changes that may affect the API. These are documented in separate tables.
Fixed Bugs and Changes in OpenSplice v6.2.x
OpenSplice v6.2.3p1
Fixed bugs and changes not affecting the API in OpenSplice 6.2.3p1
Report ID. | Description |
---|---|
OSPL-2110/ 11592 | On Windows the disconnection or connection of a network interface cable causes large memory loss A status change of the network interface triggers an event. A memory leak occurs when handling this event. Because the status of the event is not automatically reset the function to handle event is called repeatedly. Solution: The memory leak is removed and the network interface status change event notification is re-enabled to allow new network interface status changes to be detected. |
OpenSplice v6.2.3
Report ID. | Description |
---|---|
OSPL-948/ 10679 | DDSI2 sends duplicate samples for writers that publish in multiple partitions simultaneously A write in multiple partitions simultaneously is received by DDSI2 as a number of messages from a single writer, one for each partition. All these message were forwarded by DDSI2 and filtered out by the subscribers running OpenSplice. However, this required extra bandwidth and besides caused other vendors' implementations of the DDSI protocol to report them as independent updates. Solution: This behaviour has now been changed, so that DDSI2 filters out such duplicates in the vast majority of cases. In particular, as long as the writer, its local subscribers and the networking services do not run into resource limits, it is guaranteed to filter out all duplicates. The filter can, under very unlikely circumstances, conclude a message is a duplicate when in reality it is not. This requires publishing more than 4 billion samples with a single writer while carefully controlling the behaviour of the writer history cache using resource limits on local readers; a situation no real system is likely to ever encounter. We advise that on systems that may run into this, the Unsupported/ForwardAllMessages setting be set to true. |
OSPL-966/ 10707 | The RTSM tool is no longer working As a protection mechanism the RTSM tool does not continue processing when it thinks that a given address is not valid. One of the steps it takes to determine whether an address is valid, is to check whether the address lies in the virtual memory range that is expected based on the configured size of the shared memory segment. However, the tool determined the size of a shared memory segment in the wrong manner. Due to this issue the tool reports perfectly valid addresses as 'faulty' and no further processing is done. Solution: The algorithm that calculates the size of the shared memory and correct range for addresses has been repaired to ensure valid addresses are no longer reported as 'faulty' and all further processing can be done. |
OSPL-991/ 10735 OSPL-1771/ 11395 | take() and take_w_condition() do not have the same behaviour/random crash on take next instance The dispose_all_data operation on the topic was not treated identically to sending a separate dispose message for every entity. This manifested itself especially in the way the disposed data was delivered to late joiners (which sometimes couldn't see that the data was actually disposed) and in the way disposed data ignored the cleanup delay specified on the durability service. Solution: The new implementation of dispose_all_data is much more inline with sending separate dispose messages for every instance, and thus late joiners will always see the correct instance state. Furthermore the dispose messages obey the same cleanup delays as normal dispose messages. However, the dispose_all_data function will still be me more efficient with respect to the utilization of network network bandwitdth, CPU cycles and memory than the manual transmission of separate dispose messages. |
OSPL-1205/ 10845 | Terminating applications report pthread_join failed with error 35 When an application with a defined exithandler terminates and this exithandler contains an exit call the ospl-error file will report the message: pthread_join failed with error 35. Solution: The defect in the OpenSplice signalhandling is fixed and this error will not be reported anymore. |
OSPL-1334/ 10898 OSPL-1335/ 10899 | PurgeList may illegally remove a groupInstance. The purgeLists are sometimes populated by the same instance multiple times (for different generations). Although the purgeList expiry algorithm should handle these situations correctly, it seems some scenario's are not properly handled yet, and a groupInstance from the emptyPurgeList may be freed while it is already reincarnated as a new generation. Solution: New code has been added that prevents outdated generations from being inserted into the emptyPurgeList, thus preventing this list from having duplicate entries and thus preventing it from deleting a groupInstance that is already reincarnated. |
OSPL-1341 / 10914 OSPL-1930 / 11473 | The reliable network communication may not operate correctly when the first messages of a sending node arrive out of order. When reconnection is enabled and when the first messages of another starting node arrive out of order and also the discovery heartbeats arrive later then the first message the reliable network channel will not operate correctly. Solution: The notification that a node has become alive by the discovery protocol should not reinitialize the reliable channel administration associated with that node when the reliable channel had already detected that the node was alive. |
OSPL-1445/ 10981 | Possible deadlock when using the API find_topic function When in a multithreaded application, one thread uses the API find_topic function while the topic is not defined and the timeout is set, and another thread executes a function that needs the domain participant, the last thread will get blocked because the API find_topic function locks the domain participant and does not release it until the topic is found. Solution: The defect in the find_topic API function is now fixed and no deadlock will occur. |
OSPL-1495/ 11040 | In DBMSConnect the mapping from DDS unsigned types to database record fields is not correct When a topic contains unsigned integer fields the mapping to the corresponding database schema is not correct. This means that the data written from DDS to database is not equal to the data that is stored in the database. This mapping is dependent on the DBMS used. For example MySQL supports unsigned integer fields while Microsoft SQL does not. Solution: The mapping of the DDS Topic fields to the corresponding database schema should be made dependent on the type of DBMS that is used. This also applies to the reading and writing of the database records. |
OSPL-1557/ 10734 | Crash of durability during initial alignment Unregistrations that are aligned by the durability service are stored without any data to reduce footprint. These unregistrations can only be re-published locally when an instance handle is provided by the durability service while doing so. In some scenario's, the durability service did not use an instance handle while doing so, which made the service crash while locally republishing an aligned unregistration. Solution: The durability service now ensures an instance handle is created in any case while also making sure a registration is created in the instance for the writer that originally wrote the aligned sample. |
OSPL-1512/ 11066 | PRECONDITION_NOT_MET doc update The reference manuals did not correctly document all cases where PRECONDITION_NOT_MET could be returned. Solution: Manuals updated. |
OSPL-1595/ 11664 | Not receiving data locally when networking is configured but network interface is disconnected When networking does not find an suitable and available network interface networking will terminate. Because the configuration specifies networking to be present the sending of data by a publisher will be affected because it will wait until the network service becomes available. Solution: When networking finds a suitable network interface but the interface is currently not connected then networking has to continue and monitor the status of the networking interface to become available and notify the system that it is available. |
OSPL-1669 | Merged historical data is not delivered to active datareaders. When configured for merging after re-connecting, the durability service does not deliver the aligned samples to existing data-readers. Only newly created data-readers from that point forward will get the data. This is caused by some internal optimisation mechanism between the transient store and existing data-readers. The connection between transient store and existing data-readers can be closed in some situation where remote nodes disconnect and the durability service does not re-instate this connection when the node reconnects. Solution: The connection between transient store and existing readers is now checked and re-instated in case a node reconnects. |
OSPL-1681/ 11284 | leaseManager reports lease update is behind schedule It was possible that the ospl-info log file reports numerous warnings that the lease is behind schedule. These invalid warnings are comming from the leasemanager that had a fault in the evaluation algorithm of deadline leases which caused these warnings to be displayed while the lease was correct. Solution: The defect in the leasemanager algorithm is now fixed and these invalid warnings will not occur anymore. |
OSPL-1682/ 11291 | crash of spliced In certain scenario's the reader purgeList was doing invalid memory reads by trying to access already deleted purgeItems, thereby causing potential memory corruption of totally unrelated objects. Solution: The purge algorithm has been modified to prevent this situation, thus preventing the memory from becoming corrupted and improving the overall stability of the system. |
OSPL-1703/ 11354 | Crash of networking when terminating as result of the reception of a signal. When the network service is terminated as result of a signal then the kernel objects created by networking are freed while some of the networking threads may still try to access these kernel objects. Solution: The termination of the networking threads is synchronised with the freeing of the networking kernel resources. |
OSPL-1729 | Calling DomainParticipantFactory.set_qos(_) using the Java API segfaults. The underlying JNI layer of the Java DCPS API used the wrong jfieldID when getting a value from Java. Solution: The correct jfieldID is now used. |
OSPL-1816 | Re-using a Record and Replay storage in consecutive replay scenarios A issue in the Record and Replay service caused unexpected behaviour when a storage is re-used while it is was previously set to pause using the setreplayspeed command. Solution: The issue is resolved so now a storage can be used multiple times during the lifecycle of a Record and Replay service without any constraints. |
OSPL-1852 | Topic disappearance when topic created in parallel In a scenario where a specific topic was created for the first time in the system, but for which a duplicate was created by another application before the original could enable its topic, a refCount to the resulting topic got dropped and that topic could suddenly disappear while still being used by the system. Solution: A change in the refCounting algorithm has now solved this issue. |
OSPL-1855 | Synchronous signals sent by external mechanism could cause deadocks. Solution: Signals that are raised by an asynchronous mechanism will now be handled in an asynchronous manner. That means that handling of the signal is delayed until all threads have successfully finished their consultations/modifications of the shared memory, leaving it in a consistent state. Also our signal handler will no longer be installed when an (ignorable) signal is set to SIG_IGN. |
OSPL-1867/ 11443 | System termination fallback mechanism When a service crashes and system termination is set into progress, a safe system termination is not always guaranteed i.e. the service could end up in a deadlock stalling system termination. This is not acceptable and the system should always terminate. Solution: A new service termination thread is spawned when the system state of a process is set to terminating. This thread waits for 5 seconds to see if the process goes from the terminating state to the terminated state. If this has not happened after 5 seconds the process is being killed by means of _exit. |
OSPL-1923 / 11472 | Application not detached from shm after deletion of all the participants. When an application creates 2 or more participants and all these participants are deleted using the delete_participant function, the application still hold a reference to the shared memory. Solution: The defect is now fixed and when all participants from an application are gone the connection to the shared memory is also gone. |
OSPL-1926 / 11518 | Read of disposed instance may return null for key string fields on java When reading an disposed instance using the java API then it can occur that the returned sample has the key fields not set. This occurs when the topic contains a non key string field which precedes fields that are key fields. Solution: The copy function used when reading a sample has to walk over all fields of a sample and not stop at the first non key string field. |
OSPL-1934 | Durability PartitionTopic configuration for a NameSpace is not available in configurator The ability to configure partition-topic combinations for NameSpace contents for the durability service has been added recently. The configurator tool was not updated to include this configuration option. Solution: The configurator tool has been extended with the missing PartitionTopic configuration option. |
OSPL-1936/ 11509 | Reporting/tracing of networking service could be improved In case the networking service is configured to allow re-connections, it should report when a remote node re-connects. In addition, the networking service should also report the channel when reporting a missing packet in its trace (if configured) as well as report when and if the missing packet is received to be able to find out if the service recovered from the missing packet or not. Solution: The reporting and tracing extensions requested above have been added to the networking service. |
OSPL-1946/ 11512 | With compression or encryption enabled lost packets may not be resent In some situations networking would try to access the compressed and/or encrypted content of a packet in its resend administration, causing packets to not be re-transmitted. Solution: All information needed for (re-)sending of a packet are read from the packet-buffer before compression and/or encryption. |
OSPL-1952 | Re-creation of topic definitions from the XML persistent store can cause application and service to crash The XML persistency implementation of the durability service uses a deprecated (de)serializer to store topic definitions to disk and to recreate them after start-up. When using this particular serializer it is possible that types can be resolved from DDS already by other services or applications before they are finalized. When such an incomplete type is used the process that uses it crashes. Solution: The durability service now uses a new (de)serializer that ensures that types cannot be resolved before being finalised. For backward compatibility, the durability service is still able to read the old serialized format from disk. In that case it still uses the old serializer, but it ensures to write any new definitions using the new serializer and therefore the new format. |
OSPL-1998/ 11540 | Durability and Memory Consumption When using the durability service in combination with the XML persistent store and the following topic QoS settings: durability_service QosPolicy: history_kind = KEEP_LAST_HISTORY_QOS, history_depth = 1 destination_order QosPolicy: kind = BY_RECEPTION_TIMESTAMP_DESTINATIONORDER_QOS. Memory leakage can be observed. Solution: The defect in durability service is now fixed and in the described scenario data will not leak anymore. |
OpenSplice v6.2.2
Fixed bugs and changes not affecting the API in OpenSplice 6.2.2
Report ID. | Description |
---|---|
OSPL-1682/ 11291 | crash of spliced In certain scenario's the reader purgeList was doing invalid memory reads by trying to access already deleted purgeItems, thereby causing potential memory corruption of totally unrelated objects. Solution: The purge algorithm has been modified to prevent this situation, thus preventing the memory from becoming corrupted and improving the overall stability of the system. |
OSPL-1729 | Calling DomainParticipantFactory.set_qos(_) using the Java API segfaults. The underlying JNI layer of the Java DCPS API used the wrong jfieldID when getting a value from Java. Solution: The correct jfieldID is now used. |
OSPL-1852 | Topic disappearance when topic created in parallel In a scenario where a specific topic was created for the first time in the system, but for which a duplicate was created by another application before the original could enable its topic, a refCount to the resulting topic got dropped and that topic could suddenly disappear while still being used by the system. Solution: A change in the refCounting algorithm has now solved this issue. |
OSPL-774 | New rmipp option to export generated code Solution: A new command line option has been added to the RMI pre-processor to be able to create a Windows DLL from generated code. This option is: -P dll_macro_name[,] Only applicable to C and C++. Sets export macro that will be prefixed to all functions in the generated code. This allows creating DLL's from generated code. Optionally a header file can be given that will be included in each generated file. |
OSPL-1076/ 10787 | Compression in networking is not configurable other than on/off. Data compression typically involves a trade-off between CPU usage and the amount of compression achievable. The utility of the compression feature would be increased by allowing more flexibility in terms of this trade-off. Solution: The compression "level" of the existing zlib compressor may now be configured. Other compression algorithms may also be used. See the Deployment Guide for details. |
OSPL-631/ 10459 | Using read or take with max_samples limit set can cause some key-values to be never read. The read and take operations return instances starting with lower key-values. If not all available data is read at once (e.g., when having set the max_samples limit) and the lower key-values keep receiving updates, a subsequently performed read operation will return the updated instances, which may prevent the higher key-values to be read. Solution: The read and take operations are changed to provide data circularly from a cursor. This means that these operations will 'resume' a read as if read_next_instance was succesively called. This way all instances can be read even when lower key-values get updated between two read-operations with a max_samples limit. |
OSPL-1023 | Service failure actions can be taken multiple times When multiple services are known to the service framework, a failure action can be taken multiple times. Solution: The defect in the service failure action algorithm is now fixed and the action will only be done once. |
OSPL-1051 | OpenSplice RMI Services Activation/De-activation in one call Services activation was done in a per-service basis. A given service becomes active (waits for incoming requests) by calling 'DDS_Service::run(service_name, ...)' which could be either blocking or non-blocking according based on the provided arguments. To activate multiple services, the "run" operation must be called as many times as there are services. Solution: Two new operations has been added to the "CRuntime" class to activate and de-activate all the registered services in one call: - CRuntime::run() - CRuntime::shutdown(bool wait_for_completion = true) The "run" operation is a blocking operation that blocks the calling thread until the shutdown is called. DDS_Service::run operation is kept but it becomes non blocking. It is recommended to use the CRuntime object for services activation and de-activation. |
OSPL-1166/ 10823 | Terminating the "ospl -f start" operation may not kill all services The algorithm in ospl that performs the shutdown of the splice daemon and its child services in the case of blocking mode did not correctly detect whether the splice daemon had been terminated. This meant that it was possible that the splice daemon and its services may not necessarily have been terminated when "ospl -f start" returns. Solution: The shutdown algorithm in ospl has been improved to correctly detect the termination status of the splice daemon in both normal and blocking modes. |
OSPL-1172/ 10827 | Performance difference between the datareader listener and subscriber listener In certain scenarios the subscriber listener handling is faster than the datareader listener handling. Solution: The handling algorithm of the datareader listener is improved to match the subscriber handling. |
OSPL-1341/ 10914 | The reliable network communication may not operate correctly when the first messages of a sending node arrive out of order. When reconnection is enabled and when the first messages of another starting node arrive out of order and also the discovery heartbeats arrive later then the first message the reliable network channel will not operate correctly. Solution: The notification that a node has become alive by the discovery protocol should not reinitialize the reliable channel administration associated with that node when the reliable channel had already detected that the node was alive. |
OSPL-1384/ 10907 | OpenSplice logs errors when the XML configuration file contains DOCTYPE descriptors Solution: Thecode that logged the errors has been removed. |
OSPL-1393/ 10907 | The DDSI2 service uses Watchdog scheduling parameters from RT networking config The DDSI2 service incorrectly used the NetworkService/Watchdog element instead of DDSI2Service/Watchdog element from the OpenSplice configuration file for determining the scheduling parameters of the watchdog thread. Solution: It now uses DDSI2Service/Watchdog. |
OSPL-1051 | OpenSplice RMI Services Activation/De-activation in one call Services activation was done in a per-service basis. A given service becomes active (waits for incoming requests) by calling 'DDS_Service::run(service_name, ...)' which could be either blocking or non-blocking according based on the provided arguments. To activate multiple services, the "run" operation must be called as many times as there are services. Solution: Two new operations has been added to the "CRuntime" class to activate and de-activate all the registered services in one call: - CRuntime::run() - CRuntime::shutdown(bool wait_for_completion = true) The "run" operation is a blocking operation that blocks the calling thread until the shutdown is called. DDS_Service::run operation is kept but it becomes non blocking. It is recommended to use the CRuntime object for services activation and de-activation. |
OSPL-1478/ 11042 | BOUNDS_CHECK does not report the name of the incorrect member when the member is null. The copyin routines for C and C++ did not check for null-values in string fields. Solution: Check for null-values in string-fields is added. |
OSPL-1479/ 11041 | Bugfix to allow correct rebuilding of the C++ APIs ( customlibs ) on 64bit linux systems.. Rebuild would fail due to an incorrect makefile. Solution: Makefile corrected. |
OSPL-1489/ 11042 | Licenses inconsistent. The $OSPL_HOME/LICENSE file was version 2.6, but the StdLicenseterms2.3.pdf is for 2.3 Solution: PDF corrected to 2.6. |
OSPL-1511 | Setting the buffer size of the receive socket to the configured value may fail Setting the receive buffer size of the receive socket to the configured value may fail which may cause message loss in case of worst case expected network load. Solution: When setting the receive buffer size of the receive socket to the configured value a warning report is logged if the operating system doesn't apply the setting. |
OSPL-1558 | Durability sometimes creates conflicting namespace for __BUILT-IN PARTITION__ when partitionTopic is used in namespace-definition. Durability could automatically create conflicting namespace for __BUILT-IN PARTITION__ when partitionTopic is used. Solution: Durability now only creates a namespace in which the builtin-topics are matched, instead of matching the whole builtin-partition. |
OSPL-1597/ 10974 | DDSI2 external address setting refuses valid IP addresses The DDSI2 General/ExternalNetworkAddress configuration setting contained an error in validating the specified address, causing valid IP addresses to be rejected. Solution: The validation code has been corrected. |
OSPL-1639 | The OpenSplice DDS Tuner can not write bounded strings. When a bounded string is written by the OpenSplice DDS Tuner and this value is read back by the system a null reference occurs where the text of the string should have been. Solution: The defect in the OpenSplice DDS Tuner is now fixed and bounded strings are now correctly written to the system. |
OSPL-1621/ 11189 | Leakage of instances when built in topics not configured. When OpenSplice is configured not to transmit builtin topics the deletion of a datawriter was no longer reported to the rest of the Domain resulting in the leakage of instances that belonged to that datawriter and that were not unregistered explicitly prior to the deletion of that datawriter. Solution: A sample for the DCPSPublication topic is now always sent on the deletion of a datawriter, regardless of the configuration setting for builtin topics. However, this sample is non-transient and will be consumed immediately, so that it does not accumulate unnecessary resources. |
OpenSplice v6.2.2p2
Fixed bugs and changes not affecting the API in OpenSplice 6.2.2p2
Report ID. | Description |
---|---|
OSPL-626 | Allow configuration of the UDP port number ranges that networking may use for the reliable channels for receiving ACK and resend messages Each reliable network channel requires an extra UDP port which other nodes used to send their ACKs and resend messages to. When several single process instances are used each single process requires for each reliable channel an unique UDP port number for this purpose. This enables control over the used UDP port numbers which may be needed when firewall are used. Solution: A configuration element "AllowedPorts" is added to either the networking channels or channel configuration which specifies the range (list) of UDP port numbers available. When specified an available port from the configured port range is used. When not specified the configurated channel port+1 is used when it is avaliable, otherwise a dynamic allocated UDP port is used. (Note: Deployment manual will be updated at 6.2.2 release. Use the configurator tool for further information. |
OSPL-1326 | Idlpp crashes when two types in different modules have the same name and one of them has a keylist When an idl is used with 2 or more types in different modules and they have the same name and one or more have a keylist idlpp will crash. Solution: The fault in idlpp has been fixed and it is now save to use multiple types with the same name and a keylist in idl. |
OSPL-1474/ 11036 | Windows Event Log plug-in failure to initialise The Windows Event Log plug-in could fail with an access violation. This could prevent the OpenSplice daemon starting as a Windows service as this plug-in is configured to be used by default in this circumstance. Solution: The Event Log now initialises correctly. |
OSPL-1488 | DDSI2 fails to handle keyed topics with 64 members (and some variations) DDSI2 potentially performs some key re-ordering to remove the dependencies between the ordering of keys in the original IDL topic definition, the order of in which the members of the topic are serialised and the order in which the key fields are serialised. An mistake was found in the arithmetic that caused it to refuse topics with more than 64 members, or one with a key inside a nested struct with 32 fields inside one with 33 fields, &c. In such a case, no DDSI DataReaders and DataWriters would be created and no communication would take place for that topic, and the error log showed a generic error message: "handlePublications: new_writer: error -1" or "handleSubscriptions: new_reader: error -1". Solution: It now performs as intended and handles large structs correctly. |
OSPL-1521/ 11075 | Datareader deletion could cause memory leaks Under certain conditions datareaders would not clean up their resources when becomming deleted. These leaks could occur when readers refuse to connect to writers because of a partition mismatch. Solution: The defect in the cleanup algorithm of datareaders is now fixed and will not leak anymore. |
OSPL-1522/ 11074 | A reader subscribing to transient data using the "*" (wildcard) partition when samples are written to multiple partitions may lead to duplicate samples at the reader When a reader subscribes to a newly created topic/partition combination, because a writer on that partition has just been created, it should also request the historical data associated with combination. The issue was that it was actually being delivered the historical data for all partitions, including those for which samples may have already been delivered and read/taken. Solution: The behaviour has been changed so that historical samples are only delivered for the specific topic/partition that the reader has just subscribed to. |
OpenSplice v6.2.2p1
Report ID. | Description |
---|---|
OSPL-1326 | idlpp crash when two types in different modules have the same name and one of them has a keylist When an idl is used with 2 or more types in different modules and they have the same name and one or more have a keylist idlpp will crash. For example; module A { struct Z { long m; }; }; struct Z { long m; }; #pragma keylist Z Solution: The fault in idlpp has been fixed. |
OSPL-1422 | Lookup_instance leaks memory The DataReader_lookup_instance call leaked one string for topics with string-keys, when a non-existing instance was looked up in a non-empty set. Solution: The leak is fixed. |
OSPL-1424 | DDSI2 can stop accepting data when receiving fragments of old samples TDDSI2 defragmentation buffers have limited capacity and when full decide what to accept and what to drop on a policy that favours lower sequence numbers of higher ones in case of reliable communication. This policy causes the buffers to fill up slowly when every now and then a subset of the fragments of a sample arrive, but not all of them. This can only happen for "old" samples, as they have will been delivered to the data readers and no retransmits will be requested. Under normal circumstances it is very rare to receive some retransmitted fragments after receiving the full sample, but on networks with long delays, reordering and packet loss, such as a WAN, this problem is quite likely to surface. Solution: The current solution actively drops already accepted data from the defragmentation buffers, preventing uncontrolled build-up of incomplete samples. |
OSPL-1425 | DDSI2 can request a retransmit of a full sample in addition to a retransmit of some of its fragments TDDSI2 considers the full state of a proxy writer and its data readers when generating a retransmit requests in response to a writer heartbeat, with the aim of generating the least costly retransmit request for the missing data. However, it can generate a retransmit request of some fragments of a sample while simultaneously requesting a retransmit of the full sample. Solution: The retransmit request for the full sample is now suppressed in cases where a retransmit of some fragments is requested. |
OSPL-1426/ 10961 | DDSI2 can crash on topic creation On platforms where malloc(0) returns a null pointer, DDSI2 could crash on topic creation. Solution: DDSI2 now explicitly allows for this. |
OpenSplice v6.2.1
Fixed bugs and changes not affecting the API in OpenSplice 6.2.0
Report ID. | Description |
---|---|
OSPL-511 | Default OSPL xml configuration files not available in RTS The xml configuration files suppolied by default with the HDE were not in the RTS installer. Solution: Configuration files standardised across HDE and RTS installers. |
OSPL-532 | DDSI2 keyhash generation is wrong for some cases DDSI2 always generates the keyhashes included in the DDSI standard (they are spec'd as optional). For topics of which the (big-endian) CDR representation of the key is or may be longer than 16 bytes the keyhash is computed as the MD5 hash of the serialized key.DDSI2 produces an incorrect hash on little-endian platforms for keys containing bounded strings where the total serialized length of the key is >= 17 and <=32 bytes. In practice this affects interoperability when multiple nodes publish the same instance:- between little- and big-endian machines running DDSI2- between little-endian DDSI2 and any other DDSI implementation. Solution: Corrected the keyhash generation. |
OSPL-511 | OpenSplice Threads should be named To assist users (especially in the single process architecture) to name the threads used by OSPL. Solution: Major OSPL threads have been named |
OSPL-558 | Narrow operation in examples leaking The use of the c++ _narrow operation on the created readers and writer entities in some of the OpenSplice examples led to memory leaks. Solution: These leaks have been resolved by better use of the _var helper type when calling the _narrow operation. |
OSPL-593 | OpenSplice domain service installation as a native windows service At OpenSplice v6.1 running the OpenSplice domain services under the Windows Service Control Manager required the Windows Common Language Runtime. It also required the nomination on installation of a single global log directory that would hold all OpenSplice service and application process logs. When selecting to install the domain as a Windows service an incompatible 'single process mode' OpenSplice XML configuration file was installed by default. Solution: Installing and running OpenSplice services as a Windows Service now uses only unmanaged APIs so the .NET CLR is no longer required. A global log directory is no-longer required or prompted for during product installation. The installer will specify a 'shared memory' service configuration and will include a domain configuration entry to direct the log output from service processes to the Windows Event Log,for instance: ... See the Deployment Guide for more information regarding log plug-in configuration. Note that by default OpenSplice log events from application processes will still now be written to ospl-error/info.log files in the local directory, just as when not running OpenSplice as a Windows Service, but that this can be changed as per the comment in the snippet above. Note also that this entry can still be added to your OpenSplice domain configuration when OpenSplice is not installed as a Windows Service to direct service (or service and application) log output to the Event Log. |
OSPL-659 | The C++ using the standalone C DCPS API 'PingPong' example has been removed The C++ using the standalone C DCPS API 'PingPong' example duplicated the code already available in the standalone C DCPS API 'PingPong' example unnecessarily given that the use of a C API from C++ is trivial. Solution: The example has been removed. Users wishing to use the standalone C DCPS API from C++ should refer to the the standalone C examples. These can be compiled with a C++ compiler. |
OSPL-711 / OSPL-788 | Scheduling parameters for the top level service threads does not work when using single process deployment When applying scheduling(OpenSplice/Domain/Service/Scheduling) properties when using single process deployment the scheduling properties are not applied on the service. Solution: The defect is now fixed and the service thread will get the configured scheduling settings. |
OSPL-775 | Exceptions 'throw' statements in rmi C++ generated code For consistency and best practice, the C++ exceptions specification has been ignored and instead the IDL to C++ mapping rules followed. Solution: All 'throw' specifications were removed from the RMI C++ generated code. |
OSPL-778 | DDSI2 does not always deliver data for wildcard-based subscriptions To deliver data from remote writers to subscriptions using partition wildcards, DDSI2 sometimes needs to locally register the actual partition used. However, the optimisation used to avoid doing so unnecessarily did not correctly handle case in which a wildcard reader was matched to writers in different partitions. Solution: Optimisation corrected. |
OSPL-781 / 10369 | The reliable channel does not operate correctly when using IPv6 on the Windows platform For Windows a bind is performed on the sending socket using the same portnumber as used by the receiving socket. This may cause that ACK messages are not received and that the reliable communication fails. Solution: The bind is not necessary at the sending socket and is removed. |
OSPL-807/ 5725 | Durability resource_limits.max_samples QoSPolicy is not applied properly When a max_samples resource limit is set in the QoS of the Topic, samples could get rejected even though the limitwasn't reached. This was caused by the fact that the samples that overwrote a previous value sometimes resulted in an increasing number of samples in the administration that counted the samples where the counter should have remained at the same value. Solution: The counter for the number of samples is now not increased any longer when the sample overwrites a previous value. |
OSPL-808/ 7136 | Tuner does not allow to edit array elements When connecting the Tuner and creating a reader/writer to a running system that contains a topic with array elements, it shows that in the Writer tab, the elements of the array can not be modified. Solution: The defect in the Writer tab is now fixed and array elements can be edited now. |
OSPL-809/ 8239 | Durability does not allow to overrule alignmentKind for built in partition. The durability does not allow to overrule alignmentKind for the name space with the built-in partition. If set to Lazy, durability will create an extra name space with the built-in partition and alignmentKind set to Initial_And_Aligner. Solution: The durability service now no longer overrides the behaviour for the built-in topics, but only if they are disabled in the Domain configuration (//OpenSplice/Domain/BuiltinTopics[@enabled]). |
OSPL-814 | When spliced discovers a disconnecting node it only unregisters 1 DataWriter per partition-topic combination When spliced discovers a disconnecting node by its missing heartbeatst, it unregisters all writers belonging to the disconnected node. However, maximally only 1 DataWriter is unregistered for a specific partition-topic combination. If the disconnected node has more than 1 writer attached to the same partition-topic combination, only one of them will be unregistered. Solution: The internal algorithm that takes care of the unregistration of disconnected DataWriters has been changed to ensure all DataWriters of the disconnected node are unregistered. |
OSPL-820 | ospl tool should ensure the environment is cleaned up before termination when started in blocking mode When the ospl tool is started in blocking mode (ospl -f start), it should ensure that both the shared memory segment and the key-file are deleted before terminating. In the normal case on UNIX-platforms where spliced is requested to stop with a SIGQUIT or SIGTERM, that service will clean up all resources itself. However, when spliced is terminated with a SIGKILL, ospl should take care of the clean-up. Solution: Ospl now ensures that key-file and shm segment are cleaned up when started in blocking mode, even when spliced is killed with a SIGKILL |
OSPL-836 | DDSI2 fails to report configuration errors in error log DDSI2 configuration error handling lost the ability to write configuration-related error messages to the OpenSplice error log. It instead prints them on stderr which may be noticed on Unix boxes when using "ospl start", but is typically lost on windows. Solution: DDSI2 now reports configuration errors to the error log again. |
OSPL-844 | Issues with starting OpenSplice Tuner and OpenSplice DCG Setting the SPLICE_TARGET environment variable could result in problems starting the OSPL Tuner and DCG tools. Solution: The SPLICE_TARGET is no longer set by the Tuner and dcg scripts. |
OSPL-846 | SampleInfo should be extended with reception_timestamp for all language bindings For all language bindings, a new field has been added to the SampleInfo called reception_timestamp. This field represents the local time at which the corresponding sample has been delivered to the reader from which it is being accessed. |
OSPL-854/ 10511 | read/take returns NO_DATA while the reader has data In case the data sequence and sample info sequence _maximum are set to 0 and the _release flag is set to TRUE, for a read or take call with max samples set to unlimited, The read or take call will always return with code NO_DATA. Solution: The defect in the read/take call is solved and now returns the correct data. |
OSPL-890/ 10558 | Queried meta descriptor incorrect Sometimes a queried meta-descriptor string seems incomplete and is not equivalent with the original meta-descriptor. Solution: An internal error in the XML meta-descriptor (de)serializer has been repaired to fix incorrect behaviour on types with inter-module dependencies |
OSPL-904 | Reader returns NO_DATA, while samples are available and not read When using read_next_instance_w_condition where a handle is NIL readcondition is set with sample state NOT_READ, view state ANY, instance state ANY the reader has more than one instance with one sample per instance then on first call it delivers the sample of the first instance, but the second time it returns NO_DATA although sufficient samples are available. Solution: The defect in the read function has been fixed and now returns a sample when available. |
OSPL-908 | Crash when calling DDS_DataReader_create_view in combination with content filtered topics When calling the DDS_DataReader_create_view function and the system contains content filtered topics a crash can occur. Solution: The defect in the DDS_DataReader_create_view call has been fixed and will no longer crash. |
OSPL-924 | Faulty masks evaluation on dataView The masks evaluation on dataView was faulty due to this queries could continuesly be triggering. Solution: The defect is now fixed and the masks are evaluated properly. |
OSPL-942 | mmstat maintenance Minor work to improve mmstat It crashes when running in -t mode but without having a Domain running. When running in -M mode, a new header is generated for each line. This garbles up the output so it should be similar to the -m mode, where a header is printed every 15 lines When using the -o flag without the -n flag, no items are displayed. By default it should just display everything when no explicit number is specified The -n flag only works in combination with the -o flag. This should be indicated in the help. Solution: Changes applied for the above issues. |
OSPL-958 | User clock module dlopen error in error log file. When a UserClockService is configured the configured library does not load and an error (dlopen error) gets reported in the error log. Solution: The configured library resolving algorithm contained a fault and is now fixed. The library resolving now follows the following rules: when the library name contains a path open this path. If this fails, add lib in front of the name and .suffix (depending on the host OS this can be so, ddl or dylib) behind it and try to open this library if that fails, try to open the given library name |
OSPL-970 | Improvements to DDSI2 network interface selection In multi-homed systems it is often necessary to instruct DDSI2 which network interface to use using the General/NetworkInterfaceAddress setting. Until now, this required specifying the exact IP address of the host for that network interface, in essence requiring each host to have its own configuration file. Solution: New options for specifying the network interface have been added: The name of an interface (e.g., eth1) is now acceptable For IPv4 networks, if there is no exact match on the full IPv4 address, DDSI2 will attempt to match on the network portion only as determined by the network masks of the interfaces. It requires that the host portion of the specified address is all-zero for such a match. With these changes, in the vast majority of cases, there is no longer a need for a configuration file per host. Furthermore, a warning is appended to the info log whenever DDSI2 automatically selects an interface out of several available that have equal ranking. The ranking itself is unchanged, with multicast-capable networks preferred over others, then anything non-point-to-point, point-to-point and loopback interfaces. |
OSPL-977 | DDSI2 can crash when a remote entity disappears DDSI2 can potentially crash when a remote entity disappears. This requires its lease to expire in parallel with processing an explicit notification of that remote entity being deleted. Solution: A fix is applied to prevent the crash. |
OSPL-1008 | Applications may deadlock or crash during signal handling Applications may deadlock or crash when a signal is received within internal signal handling algorithm. Solution: The internal signal handling algorithm has been adapted to allow users to set their own signal handler. Furthermore, the algorithm ensures that handling of asynchronous signals is performed in a dedicated thread to prevent deadlocks during clean-up of DDS entities. |
OSPL-1021 10758 | Clash with TEST macro from c_mmbase.h The database code referenced a macro named TEST which could possibly clash with other external software and application code. Solution: This has been renamed to a better scoped C_MM_STATS macro. |
OSPL-1033 /1076 | Reference manuals incorrect for create_particpant The reference manuals still had the V5 API definition documented for create_particpant API. Solution: Reference manuals now correctly state the domainId is an integer. |
OSPL-1035 /10764 | DDSI2 failure to deserialize bounded strings of maximum length DDSI2 validates all data coming in over the network, but the input validator erroneously considered strings in received network packets of which the length equalled the specified bound as being oversize. Solution: DDSI2 now handles this correctly. |
OSPL-1049 /107678 | Java application crash on type register Randomly, on type register, a java application can crash with the following notice: malloc(): memory corruption. Solution: The type register memory allocation algorithm for java has been fixed and will no longer crash. |
OSPL-1077 | The dynamic discovery protocol does not detect all nodes for RT networking. Dynamic discovery protocol makes use of unicast communication to find all the nodes and roles. However the data is sent to the wrong port number which depending on the configuration may mean not all nodes are detected. Solution: When sending point-to-point data on a best-effort channel the destination port should be the primary port of the channel. |
OSPL-1085 | Secure Networking parsing of Credentials tag in XML configuration fails Solution: The spelling mistakes in the secure network configuration files have been corrected to be "Credentials" rather than "Credentails". |
OSPL-1115 | Specific configuration may cause a crash of secure RT networking. When the configuration of secure networking does not contain specific elements then secure networking may crash because it frees un-allocated memory. Solution: Check if configuration elements are allocated or not. |
OSPL-1125 | The OpenSplice installer no longer uses Windows SDK Global Assembly Cache Utility (gacutil.exe) to install the C# binding assembly. Previously, selecting an option when running the OpenSplice installer used the Windows SDK Global Assembly Cache Utility (gacutil.exe) to install the C# binding assembly into the Global Assembly Cache. The MSDN documentation says the following regarding this tool: "In deployment scenarios, use Windows Installer 2.0 to install assemblies into the global assembly cache. Use the Global Assembly Cache tool only in development scenarios, because it does not provide assembly reference counting and other features provided when using the Windows Installer." Solution: The installer option of using the gacutil.exe to install the assembly has been removed. If users wish to install the C# binding assembly into the Global Assembly Cache for development purposes they may use the gacutil.exe themselves to do this. Instructions for doing this are included in the Deployment Guide. Users should use a suitable approved method to install the assembly in deployment scenarios, if required. |
OSPL-1127 | The supported Access Control Module for Secure RT networking is identified as "MAC" which is not correct in the implementation. In the configuration the currently supported Access Control Module is MAC. In the implementation an other name is used. Solution: The name of the supported Access Control Module is changed to "MAC". |
OSPL-1131 | DDS_string_dup method added to the SAC DCPS mapping The DCPS SAC mapping did not have a convenient function that could be used to duplicate strings. Solution: A DDS_string_dup function has been added to the SAC DCPS mapping. Its signature is DDS_char* DDS_string_dup (const DDS_char* src);. The memory allocated must be freed using DDS_free(). |
OSPL-1148 | end_coherent_changes() may crash if the publisher contains a writer that did not write any samples in that coherent update There was an issue where calling end_coherent_changes() on a publisher may cause a crash if that publisher contained a data writer that had not written any samples as part of that coherent update. The algorithm assumed that every writer belonging to a coherent publisher would write samples within each coherent update. Solution: The algorithm in end_coherent_changes() has been fixed to also support data writers that were not active during that coherent update. |
OSPL-1156 | The Secure RT Networking security policy file is not parsed correctly. The security profile should contain a classification element in the resource section. This element is not parsed correctly. Solution: Add the parsing of the classification element to the security profile parser |
OSPL-1157 | Secure RT networking may drop messages when authorization is enabled.. The secure RT networking implementation uses libcrypto. Further secure networking is multi threaded which may cause that multiple threads may access this library concurrently which causes that the checking of the RSA signature fails. Solution: To operate libcrypto using concurrent threads callbacks are implemented which provide the locking mechanism. |
OSPL-1158 | DDSI2 could fail to provide historical transient local data in configurations without durability In OpenSplice delivering historical data to new non-volatile readers is normally handled by the OpenSplice kernel and durability service. However, the DDSI specification prescribes an implementation of transient-local data that DDSI2 adheres to, in allowing many minimum-profile application to run on OpenSplice without a durability service present. In this configuration, DDSI2 does not always provide the historical data, instead discarding a sample as if it were a notification of a lost sample. Solution: This issue has been fixed by correctly setting the relevant data. |
OSPL-1310 | Configurator tool does not allow configuring the Report element The //OpenSplice/Domain/Report element is missing in the configurator tool. Solution: The configuration element plus its attributes have been added to the configurator tool. |
OSPL-1312 | Default Lease ExpiryTime and updateFactor are incorrect in configurator tool The default Lease ExpiryTime is set to 10.0 in the splice daemon but to 20.0 in configurator tool. The updateFactor is set to 0.2 in the splice daemon but to 0.1 in the configurator tool. Solution: The configurator tool has been updated to match splice daemon implementation. |
OSPL-1314 | Inconsistent linkage of OpenSSL to secure networking services on Windows x86-64 On the above platform the secure networking services were dynamically linking Open SSL requiring the user to install Open SSL in order to use them. This was at odds with the behaviour on all other platforms. Solution: The secure networking services statically link a version of Open SSL on Windows x86-64. The secure networking services will be changed to dynamically link to Open SSL in a future version of of the product. |
Fixed bugs and changes affecting the API in OpenSplice 6.2.0
Report ID. | Description |
---|---|
OSPL-347/ 8919 | Changes in Corba Co-habitation Java PSM Solution: In previous releases only a subset of the OpenSplice API was generated using a Corba ORB. Starting from this release, the entire Corba-Java API is generated by the IDL compiler that comes with the ORB. This enables customers to use internal types like ReturnCode_t and InstanceHandle_t in a Corba environment, i.e. Helper and Holder classes are now available for those types as well. Because all classes are now properly implementing Corba interfaces and inheriting from Corba base classes, derived classes are required to provide an implementation for all abstract operations mentioned in the generated interface. In case of Listeners, OpenSplice supplies the ListenerBase class as a convenience. When Listeners extend from this base class they are no longer required to implement these operations themselves. See detailed notes in 6.2 features section above |
OSPL-1160 | DDS_Service::register_interface C++ operation signature change The DDS_Service::register_interface C++ operation accepts a raw pointer to the service implementation as parameter, whereas its implementation assigns it to a smart pointer. This situation can lead to a double free problem. Solution: The register_interface current signature is deprecated : template bool register_interface(T2 * svc_impl, const std::string & svc_name, int svc_instance_id) and adding a new one : template bool register_interface(shared_ptr svc_impl, const std::string & svc_name, int svc_instance_id) that accepts a smart pointer to the service implementation as paramter in stead of a raw one. |