This page lists all the changes and fixed bugs in OpenSplice v6.3.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.3.x
OpenSplice v6.3.3p3
Fixed bugs and changes not affecting the API in OpenSplice 6.3.3p3
Report ID. | Description |
---|---|
OSPL-3887 | SAC QoS-provider doesn't return DDS_RETCODE_NO_DATA When a QoS cannot be found, the SAC QoS-provider returns DDS_RETCODE_ERROR instead of DDS_RETCODE_NO_DATA. Solution: The API has been changed to return DDS_RETCODE_NO_DATA when a QoS cannot be found. |
OpenSplice v6.3.3p2
Fixed bugs and changes not affecting the API in OpenSplice 6.3.3p2
Report ID. | Description |
---|---|
OSPL-3732/ 12565 | DCPSPublication built-in Topic published unnecessarily Even when publication of built-in topics is disabled through the configuration file, the DCPSPublication instance that corresponds to a DataWriter is still write-disposed and unregistered as volatile data when the DataWriter is deleted to allow DataReaders to clean up the resources associated with that DataWriter. However, if no instances are registered by a DataWriter at the time it is deleted, there is no need to publish it. Solution:If built-in topics are disabled through configuration and no instances are registered by a DataWriter when it is deleted, no more write-dispose and unregister of the DCPSPublication are performed. |
OpenSplice v6.3.3p1
Fixed bugs and changes not affecting the API in OpenSplice 6.3.3p1
Report ID. | Description |
---|---|
OSPL-2452 | Sample loss using DDSI2 and readers with resource limits Description: DDSI2 could silently drop samples destined for readers at their resource limit, rather than blocking the writer and/or notifying the application or writing messages in the log. Solution: DDSI2 now blocks the data stream until the reader accepts the data, but for an unresponsive reader, it will eventually drop the data anyway. When this happens, a message to that effect will be logged. |
OSPL-2823/3626/ 12526 | Sample lost administration memory leaks and unlocked modifications Description: The internal administration related to the sample lost mechanism would leak some memory each time it was accessed. Also it could be accessed by multiple threads at the same time without any locking, which could potentially lead to undefined behaviour. Solution: The issues were resolved by freeing the administration when required to prevent memory leaks, and only allowing access while a lock is taken. |
OSPL-2960/ 12243 | Improved Durability alignment through DDSI2 Description: The Durability Service assumes that all writer/reader connections are available when one is discovered. DDSI2 however discovers one by one. This means that Durability sometimes sends data which DDSI2 will drop (because there's no related connection yet), which will cause Durability to never complete alignment. Also, DDSI2 had a problem that would sometimes increase the discovery time dramatically, which would trigger the Durability alignment issue. Solution: The Durability now creates all readers before enabling the listeners connected to them, meaning that required writer/reader connections are discovered before acting on incoming data. The DDSI2 service increases the writer heartbeat when a new reader is detected, making the writer/reader connection discovery more robust and quicker. |
OSPL-3186 | DDSI2 could use freed memory in its reordering of incoming samples Description: The sample re-ordering mechanism internal to DDSI2 could use freed memory under very particular circumstances, requiring the number of buffered samples to have reached its maximum size as well as a particular order of arrival of out-of-sequence samples at the high end of the sequence number range. This is unlikely to occur in normal circumstances, using networks of "normal" reliability (such as Ethernet) and with receivers that generally keep up with the data flow. Solution: The algorithm has been adjusted to avoid referencing freed memory. |
OSPL-3187 | DDSI2 fails to work with small WHC water mark settings Description: DDSI2 would completely fail to work when the WHC water marks were set very low. More precisely, if DDSI2 would block because the number of outstanding unacknowledged messages (N_UNACK) exceeded the high water mark, and its dynamic message packer had buffered so many samples that the readers would not yet be able to acknowledge enough samples to drop N_UNACK below the low water mark, communication would stop. This also affects endpoint discovery. One of the consequences of the inability to operate with low water mark settings meant that it was impossible to operate DDSI2 in the safest configuration, where each sample must be acknowledged before sending the next, thereby potentially causing many more retransmissions. This is especially problematic if the network is unreliable, or the receivers are unable to keep up with the influx of data. Solution: The samples are now always flushed to the network before blocking. |
OSPL-3470/ 12422 | Compatible typeSupport is rejected without cause Description: When a type was being registered that conflicted with a type that was registered earlier (for example because they had a conflicting keyList), then a PRECONDITION_NOT_MET was being returned, but no descriptive message was included as to the root cause. Solution: A message is now written into the error log and also accessible through the ErrorInfo interface. |
OSPL-3509 | Minimum networking ThrottleLimit is based on networking FragmentSize Description: When the fragmentsize > throttlelimit, a scenario with high load can cause the throttlevalue to go below the fragmentsize. At that point networking is unable to send any messages. Solution: The minimum value of the "OpenSplice/NetworkService/Channels/Channel/Sending/ThrottleLimit" config element is now based on the "OpenSplice/NetworkService/Channels/Channel/FragmentSize" value. |
OSPL-3528/ 124264 | Excessive Lease manager logging Description: In some cases where a writer was using the autounregister_instance_delay, the info log file would be flooded with messages stating that the leaseManager did not wake up in time. Solution: Logging has been cleaned up. |
OSPL-3596 | RnR storage has problem replaying types containing arrays The RnR storage does not correctly handle types which contain bounded array's or sequences. When the array or sequence contain references then the corresponding reference counts are not properly handled. Solution: The algorithm now correctly updates the reference counts when objects are copied. This includes references contained in bounded array's and sequences. |
OSPL-3636/ 12534 | Communication does not restart after ethernet cable unplug/replug Description: When the network cable is unplugged and then replugged the reliable communication is not restored when reconnect is enabled and discovery is disabled. Solution: When discovery is disabled the send component of a channel detects the network communication problem and the recovery of the network communication. This status change should also be communicated to the receive component of the channel which should reset it's status in case a reconnect occurs. |
OpenSplice v6.3.3
Fixed bugs and changes not affecting the API in OpenSplice 6.3.3
Report ID. | Description |
---|---|
OSPL-3281/ 12378 | To monitor the behaviour of the networking service and the durability service additional statistics of the internal queues have been added. Description: The networking service maintains internal queues to provide reliability and fragmentation/defragmentation. The durability service maintains a queue for persistent data that has to be stored on disk. To monitor the behaviour of these queues extra statistics have been added which will be available through the C&M API. Solution: For the networking service additional statistic counters are available on the queues used by the resend administration (ResendQueue), the reorder administration (ReorderQueue) and the network queue between the writers and the networking service. For the durability service statistic counters are now on the persistent data queue (GroupQueue) |
OSPL-3579 | Durability service may crash when aligning historical data Description: In some cases while aligning historical data with another durability service, some variable in an internal algorithm may not be initialised, but used and freed later on anyway. This causes undefined behaviour, but mostly leads to a crashing durability service. Solution: The internal algorithm has been modified to initialize the aforementioned variable in any case. |
OpenSplice v6.3.2p4
Fixed bugs and changes not affecting the API in OpenSplice 6.3.2p4
Report ID. | Description |
---|---|
OSPL-2362/ 11911 | Ownership strength changes in DataWriter's QoS go unnoticed Decreasing or increasing ownership strength would have no effect on ownership strength registered with instances on DataReader. Solution: Take into account ownership strength during evaluation of QoS updates. |
OSPL-2480/ 11804 | When an idl files contains "too many" nested modules idlpp crashes when Java code is generated from the idl files. If an IDL file contains "too many" nested modules the IDL preprocessor idlpp crashes when Java is generated. This is because in Java nested modules will lead to the generation of path names containing the names of modules: the deeper the nesting, the longer the path names will become. Because a fixed size container for path names was used, an overflow would lead to memory failure which could result in a crash. Solution: By dynamically allocating the path names there is always enough room available to hold the complete path of a module, thus preventing an overflow. |
OSPL-2482 | Removed possible deadlock in d_storeGroupStoreXML if result is D_STORE_RESULT_PRECONDITION_NOT_MET or D_STORE_RESULT_ILL_PARAM Lock on peristent XML store was not unlocked in case of a D_STORE_RESULT_PRECONDITION_NOT_MET or D_STORE_RESULT_ILL_PARAM result. This would have caused a deadlock. Solution: Lock is now always unlocked in all cases. |
OSPL-2661 | Crash when using reliable-under-publisher-crash (RUPC) functionality When a publisher node crashes and RUPC is enabled then it appears that a node that has not received all messages from the crashing publisher is not updated by the other nodes. The problem occurs because the announce messages that the RUPC function uses are sent to the wrong network addresses. Solution: The announce messages used by the RUPC protocol have to be sent to all addresses associated with the global partition. |
OSPL-3084/ 12328 | C++ copyIn/copyOut code generated from idl containing sequences of anonymous sequences failed idlpp generated invalid code for sequences of anonymous sequences. The copyIn/copyOut routines generated did not recurse into sequences and kept overwriting the base sequence resulting in memory corruption. Solution: Using the loop index to indicate sequence depth during code generation produces copyIn/copyOut routines that recurse into sequences. |
OSPL-3085/ 12326 | Cast warning in generated idlpp c++ code due to cast from const pointer into non const pointer The generated c++ code from idlpp contains a copy function for arrays (if present) which cast away a const pointer into a non const pointer. This will cause a warning with strict compiler warnings set. Solution: Generated copy code in c++ for arrays contains now also a const pointer for the from pointer. |
OSPL-3222/ 12371 | Available traces for the throttling mechanism enhanced to be less performance intrusive The trace level needed to obtain information on the throttling mechanism could be performance intrusive. Solution: A new tracing category "Throttling" has been introduced for both RTNetworking and secure networking, which allows throttling traces to be enabled separate from the other categories. On level 1 throttling traces are only emitted on change. |
OSPL-3280/ 12379 | The domain service heartbeat properties should be made configurable seperately. Currently the properties of the domain service heartbeat are controlled by the settings of the lease element. We want to split this coupling because it is desirable to specify the heartbeat frequency independently. Further it should allow to specify the heartbeat transport priority and the scheduling parameters of the heartbeat sending thread. Solution: Added a Heartbeat configuration item to the Daemon element of the Domain service configuration which allows to specify the frequency (expiry time and update factor) of the heartbeat, the transport priority QoS setting of the heartbeat writer and the scheduling parameters of the heartbeat sending thread. |
OSPL-3284/ 12382 | Manual start of networking doesn't allow communication. The kernel group write is only allowed if the number of registered services is equal to the number found in the configuration. This is done to be sure all networking services are up and running before actually doing group writes. Writes before they are up and running are done again later with a resend, but where a manual start of working is done later, communication doesn't occur. Solution: The number of registered services must be equal or greater then the number found in the configuration to perform a write. A manually started, but later networking service will now join the system. |
OSPL-3355/ 12382 | When an aligner for a namespace appears and durability services exist that do not have a aligner for this namespace then no conflict is detected and no merge action is triggered, although it should. In the scenario where a durability service has its 'aligner="false"' -property set for a namespace and its last available aligner leaves, the durability service will notice that no aligner is available anymore. When an aligner (re)appears for the namespace the durability service should perform the merge action as specified in the configuration, because the aligner may have "injected" new data in the system. Solution: When the last aligner for a namespace has left, the state for the namespace and the role will be cleared. When a new aligner arrives its initial state for the namespace is set to zero. Because the cleared state differs from the initial state a namespace state conflict is detected as soon as an aligner appears and a merge action is performed (when specified in the configuration). |
OSPL-3466/ 12420 | Report plugin configuration not applied to applications In certain scenario's, a user-defined report plugin was only used by OpenSplice services and not by applications using OpenSplice. Solution: The issue was fixed and the report-plugin configuration is now also used by applications |
OpenSplice v6.3.2p3
Fixed bugs and changes not affecting the API in OpenSplice 6.3.2p3
Report ID. | Description |
---|---|
OSPL-350/ bugzilla-44 | Segmentation fault when writing or registering a sample with a null member in Java saj_cfoiStruct did not check if structObject is NULL, which would result in a segmentation fault when writing or registering a sample with a null member in Java Solution: The saj_cfoiStruct function now checks if structObject is NULL. |
OSPL-492/ bugzilla-49 | Invalid conversion of multidimensional arrays from IDL to C# Before invalid code was generated for multidimensional arrays, sequences of arrays, and operations on them for C# Solution: Some functions have been updated and use of snprintf has been removed. |
OSPL-2243/ 11714 | Resend of unregister message may cause a crash. When an unregister message is rejected by the RT networking service then the resend of the unregister message may cause a crash because the corresponding instance administration is already freed. Solution: The RT networking service should not reject an unregister message which is consistent with the behaviour of the other readers. |
OSPL-2799 | Maximum termination wait time is displayed incorrectly when doing ospl stop When terminating OpenSplice with ospl stop a message appears on the command line with the maximum waiting time. This message was not in line with the possible configured ServiceTerminatePeriod. Solution: The maximum termination time will now be displayed correctly. |
OSPL-2789 | Compression may fail on Linux when using a large FragmentSize in RTNetworking When a large FragmentSize was configured in RTNetworking, the service might run out of stack on Linux platforms. Solution: Memory needed for handling the (de-)compression of packets is now (pre-)allocated on heap. |
OSPL-2865/ 12165 | RT Networking dies when the status of an unused network interface changes to down. The RT networking service is reported dead when the status of a network interface that is not used changes its status; for example is configured down. This network state change triggers an event within the RT networking service which is not handled correctly which causes that the network service stops updating it's lease. Solution: The function checks the network interface status and correctly handles the network interface status events. |
OSPL-3023.1 | Could not add priority_kind to Domain/GeneralWatchdog/Scheduling/Priority in osplconf osplconf did not know about priority_kind for Domain/GeneralWatchdog/Scheduling/Priority. Solution: osplconf metadata is updated. |
OSPL-3023.2 | OpenSplice_DeploymentGuide.pdf referred to old style configuration paths OpenSplice_Deployment.pdf instructed the user to use Domain/Daemon/GeneralWatchdog, but user should use Domain/GeneralWatchdog. Solution: Documentation is correct now |
OSPL-3023.3 | DDSI2 and DDSI2E services did not recognize both Scheduling element and the priority_kind attribute The parser for both services had no notion of the Scheduling element, while the common code in the user layer requires it in order to work. Solution: The parser code is updated now and the osplconf metadata file is corrected. |
OSPL-3053/ 12324 | Crash on deletion of DataWriter. In some cases where a Reader or a Writer with an activated deadline or auto_unregister policy was being destroyed, the leaseManager would still try to notify about missed deadlines or actively send unregister messages to an already partially deleted Reader or Writer. This rarely occurred, but it is clearly unwanted and might crash or corrupt the system. Solution: By now stopping the deadline and auto_unregister algorithms before the actual destruction of the Reader or Writer, this particular sequence of events should no longer occur. |
OSPL-3209/ 12368 | Durability may fail to align non-volatile data when configuring delayed alignment for one or more name-spaces With the delayed alignment enabled, durability accepts the introduction of a new persistent data-set in the system even after the start-up phase in case no data has been re-published from permanent storage by any durability service and no application has published any sample so far either. When a new data-set is detected in the operational phase and delayed alignment is required, the durability service marked all partition-topic combinations as incomplete instead of only marking the ones that match the name-space for which delayed alignment is required. As a result the partition-topic combinations that do not belong to the name-space will never be marked as complete again. In case another durability service wants to align from this durability service after that, it concludes that the set of data over there is incomplete, where it actually is complete. This leads the alignment process on the newly joining node to fail. Solution: The algorithm that marks the groups as incomplete (when detecting that delayed alignment needs to take place for a given name-space), has been modified to only mark those partition-topic combinations that match the name-space. |
12368 Durability may fail to align non-volatile data when configuring delayed alignment for one or more name-spaces With the delayed alignment enabled, durability accepts the introduction of a new persistent data-set in the system even after the start-up phase in case no data has been re-published from permanent storage by any durability service and no application has published any sample so far either. When a new data-set is detected in the operational phase and delayed alignment is required, the durability service marked all partition-topic combinations as incomplete instead of only marking the ones that match the name-space for which delayed alignment is required. As a result the partition-topic combinations that do not belong to the name-space will never be marked as complete again. In case another durability service wants to align from this durability service after that, it concludes that the set of data over there is incomplete, where it actually is complete. This leads the alignment process on the newly joining node to fail. Solution: The algorithm that marks the groups as incomplete (when detecting that delayed alignment needs to take place for a given name-space), has been modified to only mark those partition-topic combinations that match the name-space. OSPL-3224 | Durability KV store may access memory that is already freed. When cleaning up the instance administration it may occur that an already freed reference is accessed. Solution: Set the freed reference to NULL and check if it is not NULL when accessing it. |
OSPL-3254 | Failed termination messages on windows when closing OpenSplice When terminating OpenSplice with ospl stop on windows a number of messages with the following text "Failed to send the SIGTERM signal to the splice daemon process 0" could appear in the info log file. These messages appear for each service that is configured in the configuration file. In fact, the service is correctly terminated. Solution: These messages will no longer be reported when the services are terminated correctly. |
OSPL-3290 | When rebuilding custom_libs with Visual Studio the dll files in $OSPL_HOME/bin are not replaced. When rebuilding custom_libs with Visual Studio the dll files in bin were not replaced. The dll files were produced to the $OSPL_HOME/lib directory and required manually copying into the $OSPL_HOME/bin directory. Solution: When rebuilding custom_libs with Visual Studio the dll files in $OSPL_HOME/bin are replaced. |
OSPL-3342 | Potential uninitialized memory access in the Java language-binding In the Java language binding there were (internal) error paths in which uninitialized values could be returned. Solution: The return-values have been initialized for the error-case as well. |
OSPL-3351 | RT Networking : Parallel demarshalling administration may leak Due to an error in a method used by the cleanup routines to access the parallel demarshalling administration for Java, the related administration may leak if the number of threads is changed or the application stops. Solution: The error in the cleanup routines is resolved ensuring that the right pointer is returned. |
OpenSplice v6.3.2p2
Fixed bugs and changes not affecting the API in OpenSplice 6.3.2p2
Report ID. | Description |
---|---|
OSPL-2283/ 11750 | Memory leak in lookup_participant The domain identifier was not freed. Solution: The domain identifier is now freed before leaving gapi_domainParticipantFactory_lookup_participant. |
OSPL-3158/ 12351 | Memory leak after deleting a waitset The common destructor in GAPI did not free object if object was of type waitset. Solution: Memory leak fixed. |
OSPL-3188 | Error in throughput measurement of streams example The streams example measures throughput by taking the total amount of samples divided by the amount of time in one run. It consists out of a reader and a writer process which are started independently. Previously the reader would start the time-measurement when the process started, even though the writer-process was not yet running. This resulted in throughput that was too low because more time was spent measuring than was spent sending data. Solution: The example now starts the measurement when it receives the first sample. |
OSPL-3198 | Durability could crash during startup when doing initial merge Due to a timing dependency on whether the role of a fellow was set the durability service sometimes assumed that the role was available when it wasn't, resulting in trying to read a NULL-pointer. Additionally, the service would use a fast spinning loop to determine whether communication with another fellow was approved and would loop forever if the fellow would not be approved. Solution: The role is now only accessed when it is available. Furthermore the spinning loop that determines whether communication with another service is possible is made less cpu-hungry (by introducing a sleep) and the loop skips a service for which the communication state is not approved instead of looping forever. |
OSPL-3200 | Consistent final value not always guaranteed with BY_SOURCE_TIMESTAMP Where a single writer updates an instance with the same timestamp, a consistent final value for that instance was not guaranteed across all subscribers. Also when a time with all zeroes was supplied, the actual time would be used instead of the supplied time. Solution: When updating the administration of the readers the consistent final value is guaranteed by incorporating a writer-generated sequence number and time zero has no special meaning anymore. |
OSPL-3218 | Streams API returns old sample multiple times After the streams get_w_filter API call returned NO_DATA, administration in the StreamReader caused a consecutive get_w_filter to return the last received sample. This pattern (NO_DATA, last sample) repeated itself until new data was received. Solution: The administration is now left in a correct state after NO_DATA is returned. |
OpenSplice v6.3.2p1
Fixed bugs and changes not affecting the API in OpenSplice 6.3.2p1
Report ID. | Description |
---|---|
OSPL-3096 | In single-process deployment CTRL-C doesn't work Due to a signal-handler being overruled on POSIX systems, termination requests like CTRL-C (e.g., the signals SIGINT, SIGQUIT, SIGTERM, SIGHUP and SIGPIPE) would not result in an immediate stop of the application. Solution: The signal-handler for single-process deployments is no longer overruled by handlers that don't stop the application. |
OpenSplice v6.3.2
Fixed bugs and changes not affecting the API in OpenSplice 6.3.2
Report ID. | Description |
---|---|
OSPL-10 4508 | TypeSupport with invalid type name causes crash during register_type When a type support object is created with an type name which is not known in the meta database the register_type function crashes. Solution: Code change made to prevent the crash and doc updated to improve description of register_type. |
OSPL-1430 7255 | Durability Service behaviour with no aligner The current behaviour of a durability service is: when no aligner is available a durability service that cannot act as aligner itself will wait until an aligner becomes available. This is not desirable in all cases. When no aligner is available a durability service that cannot act as aligner itself will wait until an aligner becomes available. If no aligner becomes available, the durability service will wait forever. In some situations it may be desirable to exit instead. This behaviour has been made configurable using the TimeToWaitForAligner-option. Currently two values are supported, 0.0 (exit if no aligner is available) and 1.0 (wait until an aligner becomes available). The default is 1.0 which matches the original behaviour. When the durability service exits error code 1 (recoverable error) is returned. Solution: The behavior of the durability service is configurable when no aligner is present. |
OSPL-1431 10964 | idlpp multiple prefix support for Java idlpp did not support prefixing multiple modules for the java language binding using the -j option. Solution: idlpp now supports prefixing multiple modules. |
OSPL-2307-1 11751 | Recursively resolved header files all present in top level header file. idlpp would include all generated header files for C++ for which it found an idl preprocessor directive. Solution: idlpp generated C++ code does not include all recursively resolved header files anymore and instead only references the top level include file |
OSPL-2307-2 11751 | idlpp sometimes forgets top level line markers in preprocessor output idlpp would forget to include top level line markers in preprocessor output if the included file contained a idl preprocessor include directive itself and no actual idl code was declared before the include directive. Solution: idlpp preprocessor now prints a line marker for the file it's in, as soon as it finds a preprocessor include directive and the line marker wasn't printed yet. |
OSPL-2696 11998 | REPLACE and DELETE merge policy Solution: With the REPLACE merge policy it is possible to dispose and delete historical data on a node, and replace it with the transient and persistent data from another node. Immediately after successful completion of the REPLACE merge action the replacement data will be available to late joining readers, the data in the reader queue of existing readers will be disposed and replaced with the replacement data, and the generation count of the replacement data is increased. With the DELETE merge policy it is possible to dispose and delete historical data on a node. Immediately after successful completion of the DELETE merge action the historical data in the reader queue of existing readers will be disposed and is not available any more to late joining readers. |
OSPL-2705 12008 | Java deadlock during shutdown Newly spawned thread in shutdown hook to delete contained entities causes a deadlock. Solution: In OSPL v6 a user should not request an exit from within a listener thread (until the final solution has been implemented - expected in v7). A solution is to spawn a thread that calls System.exit() instead of calling the method from within the Listener callback itself. OSPL now tries to detect this deadlock, reports an error and calls system.halt. |
OSPL-2762 12045 | Deadlock on receiving SIGSEGV in Java language binding The signal handler used to install the default signal handler and re-raise SIGSEGV. This caused JVM to pass a SIGABRT to the signal handler thread itself which would try to notify itself, and as a result end up in a deadlock. Solution: Upon receiving a SIGSEGV (synchronous signal) asynchronously the signal handler thread does not change the signal mask and now invokes kill instead of raise to avoid possible deadlocks. |
OSPL-2844 12163 | Alignment of transient data can cause a crash after several restarts on a second node where the first one keeps running Node a is started and publishes transient data. Node b is started and aligns with the first node. Result is stored in persistent file. After several restarts of node b the internal hash table in the durability service is out of sync caused by the data from the persistent file and the data received from node a and causes a crash. Solution: Internal hash table in durability service was out of sync with the reality. |
OSPL-2889 12174 | Writing data with empty strings in Java may not result in correct data being received in DDS Due to an issue with the routines used by the Java language-binding to do empty-string interning, non-empty strings could show up in the data received in DDS. Solution: The empty-string interning mechanism has been fixed to prevent this issue. |
OSPL-2891 12167 | Data reader statistic "numberOfSamplesTaken" not being updated The "numberOfSamplesTaken" statistic was not being updated correctly in the Tuner. Solution: Fix applied and Tuner works ok. |
OSPL-2894 | Logger example failed to build on Solaris The logger example failed to build on Solaris due to make complications. Solution: Make file corrected. |
OSPL-2900 12235 | Instances may be corrupted when using small reader_data_lifecycle.autopurge_*_delay In case a durability_service.service_cleanup_delay > 0.0 is used for a Topic in combination with a very small value (or zero) as reader_data_lifecycle.autopurge_*_delay by a DataReader for the same Topic, instances may be corrupted in that DataReader during the delivery of historical instances in case they had been disposed prior to delivery already, no more live writers exist for it and of which the service_cleanup_delay has not expired yet. Solution: The internal algorithm that deals with the above Qos policies has been altered and no longer causes memory corruption. |
OSPL-2904 12236 | OSPL_LOGAPPEND does not work as expected The environment variable OSPL_LOGAPPEND does not work like expected. A "true" has the same effect as "false". Only if the variable is not defined do you get the append behaviour. Solution: The evaluation of OSPL_LOGAPPEND has been corrected. |
OSPL-2919 12244 | Opensplice DDS services always wait worst-case terminate period in case of a service crash When using Opensplice DDS and for some reason a service crashes or is deliberately crashed, the Opensplice DDS services always wait the complete ServiceTerminatePeriod to exit. Solution: This extra delay in the termination of services has now been resolved and the services will now close as soon as possible. |
OSPL-2977 | Appending to a stream may return RETCODE_TIMEOUT if flush limit is reached Users of the Streams API should take into account that the append call may return RETCODE_TIMEOUT, as a result of an implicit flush that hits the writer resource limits. Solution: To handle this situation the following snippet of code is suggested: result = stream->append( ... ); while (result == RETCODE_TIMEOUT) { result = stream->flush( ... ); } |
OSPL-2979 | Out of range user-friendly configuration values might result in strange values being used. When a out-of-range user-friendly size expression with the suffixes k/K/m/M was used, the reported replacement value wasn't actually used. Solution: When an out-of-range value is specified, the reported replacement value is actually used. |
OSPL-3036 12173 | Applications using DCPS Java API may crash when creating a participant in case stack-traces are not available. The DCPS Java API is trying to resolve the class name of the main-class as name of the participant. The algorithm that determines this information was not robust against stack traces not being available causing an ArrayIndexOutOfBoundsException. Solution: Made algorithm robust against not being able to inspect the stack. In this case a warning is issued in the logs and an alternative name is chosen based on process id. |
OpenSplice v6.3.1p5
Fixed bugs and changes not affecting the API in OpenSplice 6.3.1p5
Report ID. | Description |
---|---|
OSPL-707/2546/2590/2735 10333/11875/11882/12037 | Crash in memory manager In case of concurrent allocating and freeing small blocks distributed over the memory in a particular way, a free operation could shrink the region of used memory by multiple blocks of memory where it should have shrunk by only one. This in turn could lead to the shared memory allocator to allocate a block of memory twice, most of the time leading to a crash in the allocator itself. Solution: The condition for shrinking the region has been fixed such that this can no longer occur. There is no effect on memory usage. |
OSPL-2246/ 11720 | Topic content filter doesn't work with no-writers or disposed events Data is not filtered as expected when using a content filtered topic and the events are disposed or the writer is deleted. Solution: Changes have been made to the content filtered topic code so that now the instance part of the filter will be always be evaluated, but the data part of the filter will only evaluated when a valid sample is written. |
OSPL-2303/ 11761 | OpenSplice DDS services always wait worst-case terminate period in case of a service crash. When using Opensplice DDS and a service crashes or is deliberately crashed, the Opensplice DDS services always wait the complete ServiceTerminatePeriod to exit. Solution: This extra delay in the termination of services has now been fixed and the services will now close as soon as possible. |
OSPL-2535 | New reader statistic numberOfSamplesLost Solution: The new reader statistic numberOfSamplesLost counts the number of samples that have been lost for that reader during network transportation. |
OSPL-2631 | wait_for_historical_data_w_condition accepted DURATION convenience types as Time input. The reference manuals advocated the use of DDS_DURATION_ZERO and DDS_DURATION_INFINITE as valid input arguments for the Time_t min_source_timestamp and max_source_timestamp parameters. This is confusing because timestamps are expected, but durations are considered valid input. Furthermore, supplying DDS_DURATION_INFINITE leads to an uninitialized variable, which could potentially lead to non-deterministic behavior. Solution: The reference manuals have been updated, so now it is more clear what parameters are expected. Also the initialized variable bug has been fixed. |
OSPL-2720 | Configurator Tool does not handle lower case values for sizes Values such as 32k are not accepted by the configurator, but are valid by OpenSplice. Solution: Setting size values with k, m and g are now valid in the configurator. |
OSPL-2754/ 12042 | ospl tool updated to ensure orphaned key files on unix are cleaned On Windows ospl tool ensures that any orphaned key files (i.e. where there are no running processes present that match the key file) are deleted before starting OpenSplice. Solution: Extended the Windows functionality to Linux, but additionally only tidy orphaned files that belong to the same user starting OpenSplice. |
OSPL-2781 | DCPS C++ CORBA co-habitation custom library rebuild failed to re-build The DCPS C++ CORBA co-habitation custom library failed to re-build because of a missing macro definition in the supplied makefile. Solution: The missing macro definition has been added to the makefile. |
OSPL-2790/ 12047 | Missing PID when displaying Java participants in the tuner When using the Tuner in the participant view and the participant application is a Java application which is not a DDS service like the Tuner or the Tester, only the name of the class is displayed, not the PID. When several instances of the same application are running on the same node, it is not possible to distinguish one from another. Solution: The java participant applications now show also a pid behind their name to make it easier to distinguish them. The participant naming is now also consistent with the C, C++ and C# applications. |
OSPL-2804/ 12123 | Alignment of transient data failed in multiple writer-scenario In a scenario with two writers writing the same instance where the 2nd writer is deleted, alignment of transient data failed because the registration for the first writer was not aligned while the unregistration of the 2nd writer was. Solution: For each registration that has no samples anymore in the store, durability sends an extra registration for that writer. |
OSPL-2816/ 12145 | Deadlock involving groups using synchronous write Incorrect initialisation of a lock involved in processing acknowledgements on synchronous writes could cause a deadlock when different processes were trying to access the data structure. At the point where this occurs, a lock on the group with which that synchronous write is associated may be held, which could cause hanging processes in various configurations and for seemingly unrelated reasons. Solution: The initialisation of the lock has been corrected. |
OpenSplice v6.3.1p4
Fixed bugs and changes not affecting the API in OpenSplice 6.3.1p4
Report ID. | Description |
---|---|
OSPL-2763 | Shared memory leaks on deletion of DataReader. Under certain conditions memory would leak when a DataReader was deleted. Solution: The leak has been fixed. |
OpenSplice v6.3.1p3
Fixed bugs and changes not affecting the API in OpenSplice 6.3.1p3
Report ID. | Description |
---|---|
TSTTOOL-123 | Quoted partition name in Tester script is interpreted as part of actual partition name. If a user wanted to execute a reader command in a Tester script that specified a partition with dots or stars in its name, then the only way for compilation of the script to be successful was to surround the partition name in quotes. However, the quotes were then interpreted as part of the partition name when the reader is created. Solution: In a reader command, if the partition name is wrapped in quotes, then the quotes are dropped after compilation. If a user still wanted to include quotes as part of the actual partition name, then they can escape the quotation marks in the partition name in script. |
OpenSplice v6.3.1p2
Fixed bugs and changes not affecting the API in OpenSplice 6.3.1p2
Report ID. | Description |
---|---|
OSPL-2733 | Issue in Streams API could result in crash on Windows. A problem was found in the Streams API with the initialization of mutexes and condition variables, that could result in data not being published and/or undefined behaviour of applications build on top of the Streams API on Windows. Solution: The incorrect initialization was fixed. |
Fixed bugs and changes affecting the API in OpenSplice 6.3.1p2
Report ID. | Description |
---|---|
OSPL-2733 | Change in QoS settings of Streams API The QoS settings of the internal DataWriters of the Streams API allowed potentially unlimited memory usage, because the resource limits were not set. Solution: The internal resource-limit QoS settings of a StreamDataWriter have been set to max_samples = 10, to prevent potential unlimited memory usage. |
OpenSplice v6.3.1p1
Fixed bugs and changes not affecting the API in OpenSplice 6.3.1p1
Report ID. | Description |
---|---|
OSPL-2729 | Problems starting OpenSplice when OSPL_URI is quoted. OpenSplice DDS will not start with an OSPL_URI surrounded by quotes (" "). Solution: OSPL Tool now handles a quoted OSPL_URI. |
OpenSplice v6.3.1
Fixed bugs and changes not affecting the API in OpenSplice 6.3.1
Report ID. | Description |
---|---|
OSPL-614/OSPL-1843/ 10335 | New durability persistence store implementation using a key-value storage To store durable data the durability persistency store implementation should be extended with a robust and fast storage mechanism which will replace the MMF store implementation which is known to suffer from robustness issues when a crash occurs. Solution: The new persistency store implementation is based on a key-value storage which makes use of third-party products like Sqlite or Leveldb to store the durable data on disk. |
OSPL-1430/ 7255 | 7255 Durability crashes when starting a new instance of ospl if there is no aligner A fix was applied for this issue n 6.3.0p5. This fix has been removed in 6.3.1 and a new fix will be applied in a subsequent release. Solution: N/A |
OSPL-2131/ 11470 | Improvement in read performance of certain complex Java CORBA DDS data structures Solution: An option has been added to improve the read performance of certain complex Java CORBA DDS data structures by limiting the overhead caused by JNI invocations during data passing from C to Java. |
OSPL-2244 | IPv6 interface detection in Windows causes a crash If an application in Windows used the networking service and tried to detect available IPv6 interfaces a system crash occurred. This made IPv6 on Windows unusable. Solution: The implementation of the IPv6 interface detection is improved so that it no longer causes crashes. |
OSPL-2474 | Default RMI ServiceDiscoveryTimeout needs to be increased. Due to some changes in the default timing for the alignment of historical data, alignment takes a bit longer to start by default. This sometimes causes RMI to fail to locate services as the default time-out of RMI no longer matches the default durability configuration. Even though the discovery period of RMI can be influenced by using the --RMIServiceDiscoveryTimeout= command-line option, the default of RMI should match the default durability settings. Solution: The default time-out of RMI service discovery has been increased from 10 to 30 seconds. |
OSPL-2504/ 11790 | Issues with recording and replaying particular data types and content Serialization/Deserialization used by the XML-storage component of the Record and Replay service causes issues if particular character-data is present in DDS samples which are recorded and or replayed. Specifically newline characters and unbounded character sequences containing illegal XML content are not supported. Solution: Relavant parts of the product were changed and the limitations are lifted. |
OSPL-2660 | The durability service may crash when using dynamic name-spaces. When a new durability service joins the domain, it may introduce a new namespace in the domain that did not exist on the existing nodes in the domain. In this situation an already running durability service may crash when it has a matching durability policy configured for the new name-space (so when using the dynamic name-space feature). In this situation the existing durability service dynamically registers the new name-space as well and applies the configured policies to data that matches that name-space. One of the internal algorithms assumed that all name-spaces for a given durability service are fixed after start-up. Solution: The internal algorithm in the durability service has been changed to be robust against a changing set of name-spaces. |
OSPL-2676/ 11993 | Deployment guide on OSPL behavioue for signals incorrect. The deployment guide for SIGINT was incorrect in the deployment guide. Additionally, SIGQUIT behaviour was incorrect in the codebase. Solution: Deployment guide and codebase corrected for signals. |
OpenSplice v6.3.0p5
Fixed bugs and changes not affecting the API in OpenSplice 6.3.0p5
Report ID. | Description |
---|---|
OSPL-1430/ 7255 | Durability crashes when starting a new instance of ospl if there is no aligner Durability did not check if there was an aligner when dds is started. If there is no aligner and a new nodes starts, then the two nodes will reach a inconsistent state. Solution: Durability will now check if there is a aligner. If durability service cannot find an aligner, then it will send a signal to splicedemon to perform system halt. |
OSPL-2106/2361/ 11859 | Wrong evaluation of depricated enable_invalid_samples QoS When the enable_invalid_samples Qos is set to false, this QoS is evaluated as true. Solution: The defect in QoS evaluation algorithm is fixed and will now be evaluated correctly. |
OSPL-2126/ 11591 | Illegal time messages are reported Injecting disposed AND unregistered transient/persistent data into a late joining reader that had its autopurge_disposed_samples_delay set to a very low value (zero or very close to zero) could in some cases corrupt the shared memory because the instance dispose message would already purge the instance before its corresponding unregister message could register itself into it as well. Solution: This loophole in the purging algorithm has now been closed. |
OSPL-2125 | Durability Memory Leaks Fixed a memory leak during configuration parsing in durability. Additionally fixed reading of an uninitialised value in the service termination thread in the user layer. Solution: Code fixed |
OSPL-2210/2305 11702 | Remove level 4 warnings caused by parallel demarshalling on windows Parallel de-marshalling, introduced after V6.3.0 caused some W4 on windows. Solution: Warnings have been resolved |
OSPL-2541 | The tuner always displays the value 0 in the SampleSequenceNumber field When reading a sample with the Tuner the field SampleSequenceNumber in the sampleinfo table is always 0. Solution: The value of the SampleSequenceNumber field now displays the correct value |
OSPL-2545/ 11872 | Durability does not apply merge-policies with other roles after initial alignment Durability assumed that all federations in the domain would be able to communicate with each other directly and therefore assumed merge policies did not need to be applied during initial start-up. Furthermore, it selected an initial source of alignment independent of role where it should select one with the same role as itself. Solution: Durability now selects an initial aligner with the same role and applies the configured merge policies with other roles immediately after start-up |
OSPL-2617/ 11894 | idlpp-generated C-code does not compile with C++ compiler The idlpp-generated code for standalone C contains code that assigns the result of a malloc directly to a character-pointer variable. Even though assigning a void-pointer to any other pointer is allowed in C, it is not in C++ and this makes it impossible to compile the generated C code with a C++ compiler. Solution: The result of a malloc is now casted to a character-pointer before the assignment. |
OSPL-2618/ 11895 | idlpp-generated functions for the standalone C API don't compile with .NET 2008 C++ compiler External symbols are used within idlpp-generated functions for the standalone C API preventing the code to compile when using in C++. Solution: External symbols have been moved outside the function |
OpenSplice v6.3.0p4
Fixed bugs and changes not affecting the API in OpenSplice 6.3.0p4
Report ID. | Description |
---|---|
OSPL-1697/ 11351 | Durability periodic report leads to fast growing trace file The trace file is growing as result of a periodic report at the level FINE. Solution: Increase the level of this report to the FINEST level. |
OSPL-1897/ 11066 | When an invalid handle is applied to read_instance it should return BAD_PARAMETER instead of PRECONDITION_NOT_MET When read_instance is called with an instance handle that is not associated with an known instance then the operation should return BAD_PARAMETER instead of PRECONDITION_NOT_MET. Solution: When detecting that the provided instance handle is not valid because it does not reference an instance associated with the data reader then the return code is changed to BAD_PARAMETER. |
OSPL-1990/ 11560 | When using idl with c++ generation and a path lager than 1024 characters is used cppgen will crash under windows. Solution: Cppgen is fixed. |
OSPL-2051/ 11575 | Potential crash while removing synchronous readers and writers A race condition existed in the product which could, in specific circumstances, result in a crash of the spliced process. The crash could occur when a pair of synchronous reader and writer are deleted at roughly the same time. A lock was introduced to protect shared parts of the administration related to synchronous readers and writers. Because of this lock, the race condition can no longer occur. |
OSPL-2134 | The durability service adds a small delay between handling alignment requests which may cause a longer alignment time when there are requests waiting to be served. After handling each alignment (sample) request the durability service adds a small delay. This delay is not necessay when there are still requests waiting to be served. Removing this delay will improve the alignment time. After handling an alignment (sample) request check if there are still request waiting.When there are requests waiting start handling the first request from the waiting list immediately |
OSPL-2326/ 11766 | Report plugin gives unhelpful message at runtime if not built correctly If OpenSplice was built without the directive INCLUDE_PLUGGABLE_REPORTING set to 'yes', then enabling the report plugin feature would result in an obscure error message 'ReportPlugin registration failed: -1' and the splice daemon will not start. Solution: The error messages related to this issue have been changed. Now a more explanatory message indicating what happened, and what should be done to resolve the issue, is produced. In particular, the error message will now state that the INCLUDE_PLUGGABLE_REPORTING directive should be set of 'yes' in order to use the pluggable reporting capability of OpenSplice. |
OSPL-2484/ 11819 | Namespace mismatch in durability service The namespace configuration of the durability service allows catch-all partition expressions and also more specific partition.topic expressions. By mixing these two methods on different nodes in a domain, a durability service could incorrectly determine a topic does not belong to a particular namespace and enter an infinite loop waiting for namespaces from remote nodes that do include the topic. Solution: The matching algorithms in the durability service were made more robust to deal with this situation and now determine the correct namespace for a particular topic. |
OSPL-2510 | Memory leak when using CReader.read and CReader.take The CReader.read and CReader.take leaked memory by creating a new readCondition with every call. Solution: The creation of the readCondition is moved to the same location as the creation of the Reader itself. Typically a reader is only created once, now the readCondition is also only created once, which minimizes leakage. |
OSPL-2530 | RT Networking control port not set on first message The control port is determined when the interface becomes available. This occurs after the first message is initialized. In a single process configuration this may cause that the ACK messages are sent to the wrong control port. Solution: When the send channel is notified that the interface has become available set the control port into the current write buffer in case of a reliable channel. |
OpenSplice v6.3.0p3
Fixed bugs and changes not affecting the API in OpenSplice 6.3.0p3
Report ID. | Description |
---|---|
OSPL-2410/ 11793 | Potential inconsistency of builtin-data when nodes are concurrently leaving and joining a domain An issue in the product could result in inconsistent state related to a node that has left a domain, between nodes still present in the domain. The problem occurred when a node leaves the domain and a new node joins a domain before all remaining nodes are aware of the node that left. Solution: The product was modified w.r.t. processing of builtin- data, to properly handle this situation. |
OSPL-2409/ 11792 | Durability never reaches the state 'operational' in a scenario containing two or more nodes without the explicit configuration of a namespace for the builtin topics. When the durability configuration file does not configure a namespace for the builtin topics, a namespace called AutoBuiltinTopics should be created automatically. This namespace should be responsible for aligning various builtin topics. Due to a flaw one of the builtin topics, CMParticipantInfo, was not included in the namespace. Also, a policy for the namespace was not provided. As a consequence the nodes initially would try to align their namespaces, but would never reach a 'complete' state because the CMParticipantInfo topic could never be aligned. This causes the system to indefinitely try to align the namespace for this topics, and never reach the 'operational' state. Solution: The CMParticipantInfo has been added to AutoBuiltinTopics namespace. Also a policy for this namespace has been added. Now durability will reach the 'operational' state in a scenario containing two or more nodes without the explicit configuration of a namespace for the builtin topics. |
OSPL-2408/ 11791 | Enhanced bind behaviour control By allowing more control over the behaviour of the RTnetworking services regarding the bind-address and port reuse, more advanced deployments can be supported. Two attributes have been added to the General/NetworkInterfaceAddress section of the RTnetworking service: 'bind' and 'allowReuse'. The 'bind' attribute controls whether the networking service binds to the wildcard-address or ('any'), or to the NetworkInterfaceAddress ('strict'). The boolean 'allowReuse' attribute specifies whether the SO_REUSEADDR option is specified before binding a socket. (Note: The deployment manual will be updated at a later release regarding these options. The configurator tool can be used to configure the options). |
OpenSplice v6.3.0p2
Fixed bugs and changes not affecting the API in OpenSplice 6.3.0p2
Report ID. | Description |
---|---|
OSPL-2150/ 11428 | When a disconnect occurs samples are marked as NOT_ALIVE. After a reconnect the samples should become ALIVE again, but this does not occur for existing datareaders in the case where the BY_RECEPTION_TIME policy is used. In the case where a reader and a writer are running on different nodes and the nodes are disconnected, then samples at the reader are marked as NOT_ALIVE. When the connection is re-established and durability is configured to re-align the lost samples, the reader is expected to show the samples again. Because the unregistration of a sample is treated as a new sample and this sample has the policy BY_RECEPTION_TIME, the unregistration is treated as a new sample that needs to be aligned by the durability. Consequently, the unregistration incorrectly reverts the aliveness of the sample. Additionally, the process to determine a new master durability service is not taking into account the proper time-outs causing temporary conflicting masters and that results in superfluous alignment of data to take place. Solution: The durability service is changed. It now prevents to process updates of samples from writers with your own ID. This means that you do not process data from anybody that tells something about your data. The durability service now also takes into account the proper heartbeat expiry-time when determining a new master to prevent superfluous alignment of data. As a consequence the default heartbeat time-out has changed to prevent alignment in default configurations to take longer. The default expiry-time is now 4 seconds instead of 10. The deployment guide has not been updated yet to reflect this change. |
OSPL-2219 | Restart failure action on networking service causes communication error When the restart failure action on the networking service is enabled and the networking service is restarted. Communication errors can be observed with the new networking service. Solution: The defect in the service restart mechanism is now fixed and the networking service will correctly communicate. |
OSPL-2220 | Memory leak of the database type v_message In the case that a restart failure action is enabled on a service it can be observed that the database object count of v_message Solution: The defect in the service restart mechanism is now fixed and the v_message |
OSPL-2315/ 11768 | C++ ping examples does not communicate with Java pong example The C++ ping application does not initialise its string parameter leading to errors in the Java pong application. Solution: The C++ ping example has been updated to initialise all sample data before writing it |
OSPL-2317/ 11767 | Durability service issue with multiple namespaces of a remote node There was an issue with the durability service's management of a remote node's namespaces. It may incorrectly determine a remote namespace already exists and so it may not be added to the node's administration. Solution: The issue has been corrected by comparing the namespace names that are offered by a remote node rather than comparing the namespace properties as was being done before. |
OSPL-2327/ 11774 | idlpp compiler generating non-compilable code with '-l isocpp' from IDL containing structs that aren't topics The idlpp compiler was generating non-compilable code with '-l isocpp' or '-l isoc++' from IDL containing structs that aren't topics. The code did not compile because REGISTER_TYPE_TRAITS entries were being generated for these structs in error. Solution: The idlpp compiler has been fixed to not generate REGISTER_TOPIC_TRAITS entries for non-Topic types; such definitions now generate compilable code. |
OSPL-2431 | During the alignment process durability performs new, but superfluous alignments while being busy in an existing alignment. When a node is busy in an alignment action and it is triggered to align the durability service will perform this action. This is not always necessary and causes alignment data to flood the network. Solution: Superfluous alignment request during an existing alignment are ignored. This prevents flooding the network. |
OpenSplice v6.3.0p1
Fixed bugs and changes not affecting the API in OpenSplice 6.3.0p1
Report ID. | Description |
---|---|
OSPL-1478/ 11042 | idlpp OSPL_BOUNDS_CHECK NULL detection error log incorrect idlpp generated incorrect tracing for OSPL_BOUNDS_CHECKing. When a variable was initialized to NULL the BOUNDS check reported an out of range instead of NULL Solution: Updated idlpp so it logs the correct message when NULL is detected. |
OSPL-1673/ 11578 | DDSI2 sometimes logs socket error 10035 on Windows Socket blocking and waiting behaviour on Windows does not really support waiting for packets to arrive on a number of sockets in one thread, while trying to send packets in blocking mode on another thread, as the socket is either blocking or non-blocking. The auxiliary data transmission used a socket that was also in use for receiving data. Consequently, once the socket send buffer filled up, the Windows kernel could return error 10035, EWOULDBLOCK. In such a case the packet would be dropped. The protocol is such that these lost packets would not affect correctness, but it does impact timing and is generally undesirable. Solution: All outgoing traffic now uses dedicated transmit sockets. |
OSPL-2026/ 11571 | Windows Service access rights Application running as normal user is unable to create a participant or topic when running OpenSplice as a service on Windows. Solution: The communication pipe for the service thread was created using default access rights, which blocks writes from low-privileged users. This rights have been changed so that every user can write to the pipe. |
OSPL-2123 | DDSI2E mapping of transport_priority to channel incorrect DDSI2E internally maps transport priorities to channels for processing protocol messages, retransmits and incoming data on the threads that best correspond to the priority of the message. This mapping differed from the mapping of samples to channels which is done internally by the kernel. In consequence, processing could take place on a different thread than intended by the configuration. This only affected scheduling, especially under very high CPU loads. In the particular case that channels were defined in order of descending priority, the mapping was always correct. Solution: The mapping function has been fixed. |
OSPL-2244 | IPv6 interface detection in Windows causes a crash If an application in Windows used the networking service and tried to detect available IPv6 interfaces a system crash could occur. Solution: The implementation of the IPv6 interface detection is improved so that it no longer causes crashes. |
OSPL-2257 | Broader use of empty-String interning in Java copy routines Solution: The empty string interning optimisation for the Java copy routines has been applied to bounded strings as well, improving performance when the data includes a lot of empty bounded strings. |
OpenSplice v6.3.0
Fixed bugs and changes not affecting the API in OpenSplice 6.3.0
Report ID. | Description |
---|---|
OSPL-28/ 4767 | Wrong returncode in register_type API call When calling the API register_type function with a type name that is already registered but with a different metadescriptor retcode DDS_RETCODE_OK is returned. This should be DDS_RETCODE_PRECONDITION_NOT_MET. Solution: The defect in the register_type function is solved and the correct returncode is returned. |
OSPL-148 | Improve Windows/WindowsCE condition variable implementation The Windows and Windows CE condition variable implementation contained a bug where if there were no threads waiting on the condition variable, an open handle from a semaphore would not be closed when returning from the function. Solution: The condition variable signal algorithm has been improved to test whether there are any waiting threads before opening the handle. This resolves the bug and improves performance slightly because it avoids opening the semaphore when it is not required |
OSPL-528/ 9909 | Memory leak in create_querycondition Creating and deleting a QueryCondition leads to a memory leak. Solution: The memory leak has been fixed. |
OSPL-885/1645 | C# idlpp crash when no module given in IDL When defining idl for C# and a structure is defined without a module the idlpp compiler crashes. Solution: The defect in C# Idlpp is now fixed and it is now possible to define structures without a module tag. |
OSPL-1046 | Data send on a particular network partition should not be received by DDS instances that are not connected to that network partition When network partitions are configured and data is sent on a specific partition (not the default partition) then other DDS instances should not receive this data when they are not connected to that specific partition. Currently when networking receives data from a partition which is not connected or unknown then networking delivers this data in the default partition. Solution: When networking receives data on a network partititon that is either not connected or unknown to that networking instance then the data should be dropped. |
OSPL-1187 | Removal of Sun Code snippet and license acknowledgement OpenSplice Tuner and Tester used a code snippet from Sun that had a license accreditation. Solution: Removal of the code means license acknowledgement is removed. |
OSPL-479/OSPL-1435/ 10963 | DDSI2 support for IPV6 Solution: Support is added for IPV6 on DDSI2. |
OSPL-1438/ 10974 | Visual studio limitation on large topic structure definitions For very large topic structure definitions, the Visual Studio compiler runs into a limitation of the maximum length of a string. If the metaDescriptor character string data exceeds 64k in size, the Visual Studio C++ compiler fails to build the generated code. Solution: The metaDescriptor string is replaced by an array which resolves the maximum string limitation in Visual Studio. |
OSPL-1526 | Try automatic repairing option of the configurator did not work for number values When loading a config file into the configurator with faulty number values the configurator asks if it should repair those faulty values. After this is done the corrected values are not written to the config file when this is being saved. Solution: The defect in the configurator is now fixed and the corrected values are now being stored. |
OSPL-1537/ 11089 | spliced may crash after a service with the "systemhalt" failure action dies If a service dies it may not have performed a detach from the OpenSplice kernel/database and so the attached services count may be incorrect. That could lead to a crash of a database thread because the spliced may get detached too early. Solution: When spliced detects that a service has died, it ensures that attached services count is correctly maintained, so such a crash cannot occur. |
OSPL-1549/ 11096 | Durability report about name-space backup unclear When the durability service on start-up detects that the current set of persistent data on disk is not complete due to the fact that the service did not manage to fully complete the alignment of the set of persistent data during the previous run, it will check if there is an older but complete set still available on disk. If so it will replace the newer but incomplete set with the older but complete set after which durability services in the domain will determine who has the latest complete set and use that one everywhere. In case there locally is no older complete set, the error is reported. The report is not deemed very clear though and besides that it is not considered an error but merely a warning. Alignment will still be able to continue. Solution: The report has been rewritten to make situation clearer and is now reported as warning instead of as error. |
OSPL-1591/ 11165 | Services do not use the shared memory threshold correctly When the shared memory database is configured to have a threshold, the services are entitled to use half of that region meaning they are able to continue to run when shared memory gets low. The issue was that the services were in fact using that threshold region in the same way as regular applications - i.e. they were unable to use any of that region. There was also a bug where terminating services with a failureAction of "kill" were being left in a zombied state and not necessarily exiting. Solution: A fix has been applied that allows the services to correctly use up to 50% of the threshold region. A fix has also been applied to the monitoring of the died/terminating services so that they cannot be left in a zombied state. |
OSPL-1615 | Durability service does not reach COMPLETE state when some partition-topic combinations are not covered by the name-space configuration In case the durability service is configured with name-space settings that do not cover all locally available partition-topic combinations, the service did not reach the COMPLETE state that indicates that all partition-topic combinations that the durability service manages have been fully aligned. Solution: The state of locally available partition-topic combinations that are not supposed to be managed by the durability service are no longer included in determining whether or not the alignment is complete. |
OSPL-1634 | New command line parameter for the configurator The OpenSplice Configuration Editor now contains a new command line instruction. -uri=[URI] the domain config file that needs to be opened e.g. osplconf -uri=$OSPL_URI |
OSPL-1642/ 11224 | C++ memory leaks of the default QoS sets stored for the DDS Entities The statically initialized default QoS set for each DDS Entity (Publisher, Data Writer etc) are stored as pointer types and they are not deallocated, so they will appear as a leak when main exits. Solution: Storing these default QoS sets as _var types means that the container class takes care of the deallocation, even for the statically initialized types. |
OSPL-1644 | Inappropriate warning when retrieving network interface information on Windows When a network interface is present but not connected or configured then a warning is given which is not appropriate. Solution: The discovery of the network interfaces should only consider network interfaces that are available and the warning is now only output when required. |
OSPL-1654 | Networking crashes when a network partition is configured without an explicit name Networking crashes when a network partition is specified without a name. The name attribute of a network partition is optional, when not specified the address should be set to the address of the network partition which is omitted. Solution: When the name of a network partition is not set the name is set to the address attribute of the network partition. |
OSPL-1668 | Dispose/writedispose action returns error in the Tuner When creating a reader/writer in the Tuner and then clicking on the Dispose or WriteDispose button an error message may be shown in the status pane stating that the dispose failed while the dispose from system-perspective was successful. Solution: The algorithm for showing this message is fixed and the message will not be displayed anymore. |
OSPL-1708 | Default MMF persistency configuration settings don't work i.c.w single-process mode When selecting MMF as persistency and running in single-process mode, the durability service would not start due to wrong default settings for mapping address and size of the store. Solution: The default settings are changed in case of single-process mode to ensure proper functioning of the durability service in that deployment mode as well. |
OSPL-1751 | DDSI2 configuration defaults incompatible with various locales When starting DDSI2 in a locale in which the decimal separator character was different from "." (for example, the French locale, in which it is ","), some DDSI2 default values would be flagged as erroneous, preventing DDSI2 from starting. Solution: DDSI2 has been modified to avoid this problem. |
OSPL-1806/ 11373 | Tuner crash when trying to read samples which contain a lifespan that is not set to infinite The Tuner crashes when trying to read samples which have a limited lifespan set. Solution: The defect is now fixed and the Tuner will not crash. |
OSPL-1889 | An IDL file that contains a typedef to an enum causes problems in Java. If the IDL contains a typedef to an enum, then the middleware should unwind the typedef to retrieve the definition of the enum. This was not done properly, which effectively caused the system to crash. To avoid this, customers had to rewrite their IDL in such a way that it did not contain any typedef to enums. Solution: The implementation of the IDL processing function for Java has been modified so that the issue does not cause crashes anymore in Java. |
OSPL-1913/ 11463 | Issue performing dispose or writedispose as last operation in coherent set The completion of a coherent set is signaled to the DataReader side by way of sending a new sample that contains the transaction information. That sample is created as a clone from the last sample sent from within the set. That sample was not being stored correctly in the case of a dispose or writedispose so was not being sent. Solution: The algorithm has been corrected so that any form of a writing a sample will store the sample so it can be resent when the transaction is completed. |
OSPL-2000/ 11528 | The wait_for_historical_data_w_condition() call on the DataReader is not working properly The wait_for_historical_data_w_condition can return BAD_PARAMETER even when all input parameters are correct due to the fact the durability service is not ready to receive the request from the DataReader at the time it was issued. Furthermore, the durability service may also fail to deliver all historical data that matches the condition if the condition contained a filter expression. Solution: The wait_for_historical_data_w_condition algorithm now waits until all configured durability services are operational before issuing the request. If none have been configured or one or more that have been configured are not operational before the given time-out expires, PRECONDITION_NOT_MET is returned. Furthermore, the internal algorithm to evaluate the filter expression has been modified to ensure correct evaluation of the expression plus parameters against the set of available historical data. |
OSPL-2004 | Exception handling is broken on POSIX Even though the application signal handler is properly called from the thread that caused synchronous signal, it is ALSO called from within the signalHandlerThread before that. It is obviously not supposed to do that. |
Fixed bugs and changes affecting the API in OpenSplice 6.3.0
Report ID. | Description |
---|---|
OSPL-505/OSPL-704 | OSPL_EXIT_CODEs are not useful in a shell. When using ospl two return values OSPL_EXIT_CODE_RECOVERABLE_ERROR (-1) and OSPL_EXIT_CODE_UNRECOVERABLE_ERROR (-2) are indistinguishable in a shell. Solution: The return codes are now postive +1 and +2 |
OSPL-1078/ 10788 | Support for parallel demarshalling should be available on Java an C++ Demarshalling data to a language-binding specific format may take considerable processing depending on the type of the data. Since demarshalling is done by the application thread performing the read/take, demarshalling occurs single-threadedly, limiting the throughput that can be achieved. Solution: The C++ and Java datareaders have been extended with support for demarshalling with multiple threads. The number of threads used can be controlled by using the new set_property(DDS::Property) operation on C++ and Java datareaders. The property "parallelReadThreadCount" accepts a string representing a positive integer (e.g., "4") as value. If the call was successful, successive read/take operations on that datareader will use the provided number of threads for the demarshalling step of the respective operations. dr.set_property(new Property("parallelReadThreadCount", "4")); |
OSPL-1194 | Record and Replay: Removal of mode attribute The 'mode' attribute of RnR XML storages has been removed because it was not clear how this setting should be used in different circumstances with new and/or existing storages. Solution: The default behaviour is now to always append to a storage, when its resources (i.e. XML files) exist. If the resources do not exist they will be silently created, if possible. The overwrite-behaviour that was achieved by setting the mode to 'w', has been replaced by a separate TRUNCATE command. This command will remove all data from a storage, but it can only be processed if the storage is not open for recording and/or replaying. |
OSPL-1348 | Record and Replay: Removal of interest Solution: The RnR command API has been modified to allow removal of individual record/replay interest instead of forcibly removing all interest by stopping the scenario responsible for adding it. The API contains separate commands to either add or remove interest to record or replay data belonging to a specific partition/topic. For example, to stop recording data, a REMOVE_RECORD command must be issued, containing interest expressions that match exactly the expressions of the ADD_RECORD command that initiated the recording. Currently all interest will still be forcibly removed when a STOP_SCENARIO command is published but future releases will only allow interest to be removed by publishing remove commands. |
OSPL-1640 | Default for ospl changed Inexperienced users finding ospl hard to use as the default isn't friendly. Solution: ospl used to stop by default. It now displays the usage. |
OSPL-1790 | Added missing functions to DataReaderView in the Standalone C++ language binding Applications built on the Corba C++ language binding couldn't be built on the Standalone C++ language binding due to missing functions in the DataReaderView.
Solution: The DataReaderView in the Standalone C++ language binding is extended with the missing functions. |
OSPL-2019 | Function calls on deleted entities in ccpp and sacpp now correctly return already_deleted Calling functions on deleted entities in ccpp and sacpp returned BAD_PARAMETER instead of ALREADY_DELETED. Solution: Code fixed to match OMG specification. |