SourcePro 12.0.1 Release Notes

Article ID: 2065
Last updated: 11 Apr, 2018
Article ID: 2065
Last updated: 11 Apr, 2018
Revision: 3
Views: 53264
Posted: 17 Jul, 2013
by --
Updated: 11 Apr, 2018

These release notes contain a summary of new features and enhancements, late-breaking product issues, migration from earlier releases, and bug fixes.
For change logs or other information on previous releases, please contact Technical Support.
Rogue Wave products may contain undocumented interfaces. These interfaces are not supported for and may be changed or removed from release to release.
For updated platform support, please see the Support Matrix at Select Supported Platforms.
New features and enhancements added in release 12.0.1 are denoted by the prefix “[12.0.1]”.
Move constructors and assignment operators have been added to several classes in Tools to support the new rvalue reference and move semantics feature of C++ 11. Move semantics can improve performance by avoiding costly deep copies of rvalue values. (SP-12699)
To support better resource control, the Tools Module now includes scope guard classes that implement the C++ idiom “Resource Acquisition Is Initialization” (RAII). These classes provide a simple mechanism to allow an object to take ownership of a resource and to release that resource, thus avoiding potentially unsafe or verbose error handing code. (SP-11009)
Tools now provides a compression API for use with streams. New class RWCompressedStreamBuffer derives from std::streambuf, and provides a mechanism to compress data that is serialized to an std::ostream or deserialized from an std::istream. (SP-10959)
The Tools Module now provides two implementations of RWCString and RWWString. While these
different implementations have the same basic API, each features performance characteristics that are
tuned to particular usage scenarios. When you build SourcePro using RCB, you must select the implementation
that best suits your development situation. See Section 4.11 “Performance Considerations”
in the Essential Tools Module User’s Guide for details. (SP-12524)
DB Interface Module’s Open SQL API now includes support for data callback methods that facilitate
handling data in pieces. Data callbacks are useful for very large data that may not fit in memory for a
single database call. A custom callback class can be invoked repeatedly as needed during SQL statement
execution until all the data is fetched from or sent to the database. (SP-12950)
Removed code guarded by deprecated macro RW_NO_STL (SP-10472).
Performance enhancement to update SourcePro compiler optimization flag usage
for all supported platforms (SP-12484).
[12.0.1] OS Selection has been simplified in RCB. Users no longer need to specify a
specific version, and instead can specify an OS family (SP-14016).
Specific platform information is not included in this document. Please see the Support Matrix at
RWZone updates:
Removed the RWZone implementation introduced in SourcePro 10 (SP-12953).
Enhanced the pre-SourcePro 10 RWZone API (the current API) to support complex
transition rules such as those represented in the Olsen Time Zone Database
RWZone::os() is now the default implementation for RWZone::local() (SP-
Removed legacy generic containers (SP-13218).
RWDecimalPortable now handles values for Infinity, sNaN, and NaN (SP-12755).
Refactored method RWWString::multiByteToWide()for a more efficient
implementation (SP-12737).
Updated RWFile::Read() to return the number of elements stored (SP-9560).
Methods in RWTCountedPointer and RWTPointer are now inline (SP-8731).
The RWTSingleton<T> default constructor now has protected access (SP-10390).
Added support for saving a RWDateTime into a database in any time zone (SP-
Updated RWDBStoredProc to stop syncing input parameters when fetching data,
in order to increase performance (SP-12347).
Performance enhancement while converting user-supplied data to database vendor
bound buffers and vice versa (SP-8841).
DB2 CLI: Added support for DB2 datatype DECFLOAT (SP-10155).
ODBC: Add RWBasicUString support (and fix RWWString support) (SP-13256).
ODBC, Microsoft SQL Server, and DB2: Updated implementations to use 64-bit
specific ODBC signatures (SP-11607).
Added functionality to make use of Oracle prefetching of LOB Data capabilities
DateTime and LOB adapters now use OCIArrayDescriptorAlloc() to increase
adapter performance (SP-8917).
Silenced HP-UX aC++ compiler warning in rwocitypes.cpp (SP-12579).
Added support for default value bulk insertion (SP-9582).
Added support for read-only scrollable cursors (SP-8871).
Added support to RWFtpClient for users without passwords (SP-4817).
Made the RWSecureSocketListener interface consistent with that of
RWSocketListener (SP-12607).
Refactored RWSecureSocket so that it no longer has numerous redundant calls to
validate the current context (SP-6905).
RWSecureSocketListener interface is now consistent with that of RWSocketListener
Made RWDecimal storage more compact on 64-bit machines (SP-7927).
Known issues discovered for release 12.0.1 are denoted by the prefix “[12.0.1]”.
Each SourcePro C++ release is a replacement for, not an upgrade to, the previous version. Always perform an
installation into a new area, and not into the same install directory as a previous version.
Module dependency checks are not performed in the Installer. If you attempt a
build with dependencies on uninstalled components, RCB displays a warning
There is no uninstaller for Windows or UNIX. To uninstall SourcePro, simply
delete the installation directory. On Windows, no registry entries are made. On
Windows, you may need to delete the desktop shortcut and the Start Menu group
for SourcePro C++ 12.0.
In the Installer Product Selection dialog box, the scrollbar arrows are very slow.
You can grab the scrollbar or click on the scrollbar area to rapidly move through the
The user needs to have administrator privileges to run the installer. If you don’t
have administrator privileges, the installer will complain when you choose an
install location. A solution is to create a new directory, right-click it to bring up the
Properties dialog, and choose the security tab, where you can give yourself full
privileges for that directory. You can then install from this new location.
UNC installation paths not supported. For network installs on Windows, using a
UNC path to specify the installation location is not supported. Rather, create a
mapped network drive to the desired network location. For the mapped network
drive, be sure to check “Reconnect at Logon” checkbox. If this option is not
selected, the mapped network drive will not appear when browsing for an install
Unknown or non-verified publisher message. When launching the installer, the
User Access Control (UAC) dialog may indicate that the installer executable is from
an “Unknown” publisher, i.e. the publisher cannot be verified. You may also
encounter this message when launching RCB on some Windows platforms. This
message can be safely ignored.
On 64-bit machines, installer may fail to launch. When inserting the 12.0 installer
DVD into a Windows 64-bit machine, the installer may fail to launch automatically.
To launch the installer manually, go to the root directory of the DVD and run
The installer will warn the user that the “unzip” utility is not present in the
system path. The installer will then proceed without issue. This warning message
is purely cosmetic.
UTF-8 locale results in erroneous text boxes that may obscure GUI. On Solaris,
when invoking the installer with the LANG environment variable set to a UTF-8
locale (i.e. en_US.UTF-8), a series of small boxes with the word “iiimx” and/or
“English/European” may be generated while navigating through the installer,
possibly obscuring portions of the GUI. These boxes can be suppressed by
unsetting the LANG variable or setting it to another locale (i.e. C, POSIX,
Installer leaves behind several temporary files. Approximately a dozen files are
left behind in the temporary directory after the installer exits, each about 300 bytes
in size. This is caused by a bug (#IOA-000064318) in the software suite
“InstallAnywhere” used to create the installer. The default temporary directory is
created in /tmp with the name installer.dir.<process> where process is the
process ID of the executing installer.
Under specific build constraints, RCB menu options all become disabled
Given certain rare build constraints, all RCB menu options become disabled (grayed out)
due to constraint checking. If this occurs, exiting the screen with constraint checking
enabled is not possible. If you wish to go back to alter previous screens, first turn off constraint
checking, move to the previous screen, and then re-enable constraint checking. This
situation is triggered when building both the Internationalization library and any library
that requires multithreading, while simultaneously not building the Threads library.
Missing Top-Level Build Results HTML Page
Whenever you invoke RCB to build some set of libraries, there should be a build results
HTML page at <buildspace>\records\results\index.html. However, this occurs only the
first time you invoke RCB; for subsequent builds this file is missing. You can, however, find
the same information by looking in the subdirectory for the buildtype of the build just performed.
For example, the results for a 12d build would be found at
<buildspace>\records\results\12d\index.html. (INF-2847).
LANG Environment Variable Setting on Solaris
When invoking the RCB GUI with the LANG environment variable set to a UTF-8 locale (i.e.:
en_US.UTF-8), a series of small boxes with the word 'iiimx' on them may be generated as
the user navigates through the RCB GUI pages. These boxes may obscure portions of the
GUI. These boxes can be suppressed by unsetting the LANG variable or setting it to another
locale (ie: C, POSIX, or en_US.ISO8859-1) (INF-4361)]
Unknown or Non-verified Publisher Message
On some Windows platforms, the User Access Control (UAC) dialog may indicate that the
RCB executable is from an “Unknown” publisher, i.e. the publisher cannot be verified. You
may also encounter this message when installing RCB on some Windows platforms. This
message can be safely ignored.
UNC Path Incompatibility
On Windows, UNC (Universal Naming Convention) paths generally are exports provided
by remote file servers. These paths take the form \\host\share\path. While it is possible
to launch RCB from a UNC location, all paths specified in the buildspec must be located on
paths identified using a drive letter.
There are three cases where the UNC path may cause problems:
You export the build and the local buildspace, the export buildspace, or both are
UNC paths. The result is a fatal error referring to a file null. The stack trace in
the RCB err.txt file will reference a Invalid
argument thrown from
If you create a local buildspace, you can create the buildspec without issue, but
the characterization process will fail. The resulting error message indicates that
null is not recognized as an internal or external command, operable program or
batch file.
If a third-party library uses a UNC path, RCB appears to handle these paths correctly.
However, when RCB attempts to link generated libraries and examples
against libraries located on UNC paths, the link operation reports undefined
Mapping the UNC paths and using the mapped drives' letter in your RCB build works
around all three of these issues. (INF-4614)
Using EXCEED™ and UTF-8 encoded character sets
If using EXCEED™, Java™, GUI applications will not work with any UTF-8 character
encoding, for example, en_US.UTF8. If RCB launches at all, fatal errors may occur. As a
workaround, try using VNC™ with windowmaker window manager, or the console,
instead of EXCEED™. Note: This problem has also been seen using the Gnome desktop
environment. (INF-4716)
No spaces in #include path strings
RCB-generated makefiles do not put quotes around include path strings. If the path to the
installation directory (local buildspace), export buildspace, or a user-provided third party
library contains spaces, then compile failures will result. One way to prevent these failures
is to ensure that the paths for the locations in question don't contain spaces. However, this
may not be possible in some environments. If it isn't possible to remove all spaces from the
paths, select the build action of “just generate makefiles” and then perform the build
through RCB. Once RCB has generated the required makefiles, alter the makefiles to quote
the path(s) which contain spaces, then execute the relevant makeall_<buildtype> script
(located in the root of the buildspace) to perform your build manually. (INF-2215)
Using the Solaris SunPro Compiler and the native C++ Standard Library
When using the Solaris SunPro compiler and the native C++ Standard Library, the number
of bytes counted by an RWAuditStreamBuffer cannot be printed without forcing the compiler
to invoke the member conversion operator. The following code demonstrates the
issue: RWAuditStreamBuffer buf;RWbostream bcount(&buf);std::cout << buf << std::endl;
This problem affects the Essential Tools examples manual/auditbuf and
manual/auditbufx. The problem is not observed when using the STLPort C++ Standard
On HP-UX, using other than C Locales with the C++ Standard Library
The C++ Standard Library that comes with the HP-UX C++ compiler has problems with
locales other than the “C” locale. This can cause failures in
RWAnsiLocale::stringToDate(). (SP-10843 / HP CR# QXCR1000990079).]
The Internationalization Module depends on the International Components for Unicode (ICU), a set of
open-source C and C++ libraries developed and maintained by IBM. The ICU is included in binary
form with the Internationalization Module. When building the Internationalization Module via RCB,
you may use the provided binary (by default), or an installation of ICU already existing on your
The installer always copies the ICU onto your disk if you choose to install the Internationalization
Module. You may simply remove it if it is not needed.
This release of the Internationalization Module was certified using version 4.4.1 of the ICU:
Here is the version 4.4.1 readme:
Here is the download site:
Unicode Regular Expression support, via RWURegularExpression, is currently supported at Levels 1,2
and 3 as presented in version 5.1 of the Unicode Technical Report number 18. This technical report
contains suggested features and syntax for a Unicode Regular Expression solution. The technical
report is available online at:
At Level 1, string character comparisons are performed based on the bitpatterns of the characters in
the pattern and search strings; canonical equivalents are not matched. No locale-dependent features
are currently supported, with the exception of the detection of breaks in the text (character, word, line,
and sentence breaks). In the Internationalization Module, this level is called “Basic Conformance
At levels 2 and 3, character comparisons are done with locale-specific knowledge, cannonically equivalent
character sequences match, and surrogate pairs are correctly handled. In the Internationalization
Module, this level is called “Tailored Conformance Level.”
Please note that, although version 5.1 of UTR 18 was used to direct the development of
RWURegularExpression, UTR 18 has since been updated. The latest version of this technical report is
changed in two notable ways:
First, direct support for surrogates is now recommended at Level 1, whereas it had
previously been recommended for Level 2 and higher.
Second, the suggested syntax for the construction of Unicode Regular Expression
patterns has been changed to a more PERL-like syntax.
At this time, RWURegularExpression conforms to the earlier version of UTR 18.
Memory tools (specifically Purify and Valgrind) report that the ICU holds some
amount of memory at program termination. This memory will be released by a call
to u_cleanup (found in <unicode/uclean.h>), which restores ICU to its initial
Threading Package:
RWThreadPool::stop() does not ensure that threads that have already removed
themselves from the queue (but which haven't completed executing) are joined
before returning. These threads may attempt to access members of RWThreadPool
after it has gone out of scope, resulting in abnormal terminations or assertions.
As a general workaround, a short sleep (1 second) after the call to RWThreadPool::stop()
should allow any outstanding threads to stop and join on their own.
We are investigating this issue and will attempt to resolve it in a future release. (SP-10213)
Smart Pointers Package:
The RWTOnlyPointer copy constructor and assignment operator take const
RWTOnlyPointer references, but casts away const on the parameter in order to
invalidate it.
The parameters should be changed to non-const references to be correct, but this could
potentially break user code which depends on being able to pass a const parameter. This
issue will be fixed in the future.
Do not use RWTOnlyPointer instances in containers that expect assignability and copy constructability.
This could cause issues because the value passed to the copy constructor or
assignment operator will be invalidated. (SP-10222)
Solaris 11 Threading Issue:
[12.0.1] Oracle Solaris 11 changed the behavior of various functions related to
setting and retrieving thread attributes. These changes are incompatible with
assumptions the SourcePro Threads Module makes and may lead to unexpected
exceptions, silent failures, or other errors. For this release, it is recommended that
users avoid thread attributes related to priority, scheduling or inheritance on
Solaris 11. This behavior will be reviewed in a future release.
Dropping stored procedures: During testing, intermittent failures have been
observed when dropping stored procedures with SQL error SQL0658N. This has
been identified as a problem in the DB2 CLI client. (SP-12316 / IBM IC73906)
Setting the maximum number of connections: Setting the maximum number of
connections was deprecated in DB2 8.1 by IBM. Please see IBM's DB2 APAR
JR18223 (SP-9012).
Support for transaction savepoints: Support for transaction savepoints is
implemented using Transact-SQL statements, as the ODBC API has no methods to
support savepoints. In the Microsoft ODBC SQL Server documentation for SQL
Server version 6.5, this is the recommended method for implementing savepoints.
However, the SQL Server 7.0 and SQL Server 2000 documentation states that the
use of Transact-SQL statements may cause undetermined behavior in the driver.
During testing, no undetermined behavior has been detected.
RWDBDatabase and multithreaded applications: In multithreaded applications,
producing RWDBDatabase objects using an RWDBManager::database() call in
each thread simultaneously results in a segmentation fault. This is due to a MySQL
native call that is not multithread-safe.
To work around this problem, serialize the production of the first RWDBDatabase object.
Alternatively, call MySQL native API mysql_server_init() (mysql_library_init() for
MySQL 5.x) before accessing the DB Access Module for MySQL. (SP-8553)
DB2 Driver Configuration
On UNIX platforms, with the unixODBC 2.3.0 driver manager and the DB2 9.7 client (FixPack 4 on
Linux platforms, FixPack 2 on others):
The following odbcinst.ini options were used with the DB2 ODBC driver:
DontDLClose = 1
FileUsage = 1
Threading = 0
The threading option may address possible SIGABT crashes that have been observed in multithreaded
ODBC applications.
The following db2cli.ini options were used with the DB2 ODBC driver:
Microsoft SQL Server
This driver ignores the database argument passed to the RWDBManager's
database() function. Instead, the database associated with the RWDBDatabase
object returned by the database() function is the default database of the user.
HP-UX Itanium and multithreaded builds: Multithreaded builds of the DB Access
Module for PostgreSQL on HP Itanium must be built using a thread-enabled
PostgreSQL client, which can be built from PostgreSQL source using the configure
option --enable-thread-safety. (SP-12322)
Binding 8-byte long and unsigned long Data: The Sybase Client-Library CS_INT
datatype is strictly 4 bytes, even on 64-bit platforms. Binding a long or unsigned
long on a platform with an 8-byte long results in data truncation. Use the int
datatype instead.
Cursor Limitation: This library has problems handling decimal columns with
NULL values through cursors. On some platforms, deleting a row with null values
in decimal columns through a cursor causes a core dump. In some platforms, it
returns non-null values for NULL columns. Sybase has identified this as a bug.
(Sybase #94310 / SP-7765)
Multithreaded Asynchronous Limitation: During testing for Linux, it was found
that calling ct_poll() (the Client-Library function used to check the completion of
an asynchronous operation) would cause a crash if called simultaneously from
multiple threads on this platform. To prevent this, calls to ct_poll() are
synchronized; no more than one call to ct_poll() can be active from SourcePro DB
at a time.
Serialization of ct_poll() can, however, cause unwanted performance side effects if you
are using asynchronous connections from your multithreaded program. If you are writing
multithreaded code that also uses asynchronous connections from more than one thread,
there is no workaround; you must incur this performance burden. If, however, you are
writing multithreaded code using asynchronous connections, and the asynchronous connection
usage is isolated to one thread only, you can safely turn off ct_poll()
To turn off this synchronization, remove the -DRWDBCT_POLL_MUTEX from the generated
product makefile in your workspace's source/sybasect/<build_type> directory, and run
"make clean; make" in that directory to fully rebuild the Access Module with the new
makefile. The removal of that macro will cause ct_poll() to be called without first checking
if another thread is calling it.
RWDBOSql limitation for RWCString data: If a user attempts to bind RWCString
data having length greater than 16384 bytes into a column of type TEXT, the data
gets truncated to 16384 bytes. This is due to the page-size limitation in Sybase.
A workaround is to insert the data as a literal rather than a placeholder. All DB Data Manipulation
Classes will put RWCString data greater than 16384 bytes as literal in the SQL sent
for execution. However, while using class RWDBOSql, the user must perform this before
passing the statement to the RWDBOSql instance. (Sybase case #10832821 / SP-7789)
The DB Access Module for Sybase supports bulk writing through the array interface provided by the
Sybase Bulk-Library function blk_bind(), which is part of the Open Client and Open Server common
libraries. However, Sybase Bulk-Library does not support insertion with column-list. Here are some
other specifics on using bulk insertion with SourcePro DB and Sybase:
The RWDBBulkInserter associated with the DB Access Module for Sybase can
accept RWDBTBuffer<RWDBBlob> with elements up to 64K in width. Elements of
width greater than 64K may corrupt the database.
Bulk insertion is implemented based on the Sybase Bulk-Library, which may
impact the recoverability of the database in case of failures. See the Sybase
documentation on "Bulk-Library client programming" for full details.
The Sybase Bulk-Library call blk_bind() doesn't report errors when NULLS are
inserted into a column that doesn't accept NULL values.
Sybase does not allow bulk insertions in tables storing data that can expand in size
from client to server, when LONGCHAR capability is enabled. The following error is
reported: "BCP insert operation is disabled when LONGCHAR capability is turned on
and data size is changing between client and server character sets since BCP does
not support LONGCHAR yet." This is a Sybase limitation. (Sybase Case# 10829253,
Sybase CR# 287247 )
Some workarounds for this problem are:
Set the client character set the same as the server character set. This prevents any
data conversions between client and server. See the Internationalization and
Localization section in the DB Access Module for Sybase User's Guide for changing
client locale settings.
Turn character set conversion between client and server off. Refer to the Sybase
ASE System Administration Guide for ways to turn the character set conversion
Executables using the Sybase Access Module multithreaded dynamic builds on the AIX operating system
have been observed to produce intermittent SIGILL crashes, if not linked with Sybase vendor
libraries. To work around this issue, Sybase vendor libraries or the Sybase Access Module library can
be linked to the executable. The Sybase Access Module examples link the Sybase Access Module
library. As these failures are intermittent, if you do not observe them, you do not need to link these
libraries to your executables. (SP-10044)
Executables using Sybase Access Module multithreaded dynamic builds on Solaris operating systems
have been observed to produce intermittent segmentation faults if not linked with Sybase vendor
libraries. To workaround this issue, Sybase vendor libraries or thSybase Access Module library can be linked to the executable. The Sybase Access Module examples link the Sybase Access Module library.
As these failures are intermittent, if you do not observe these failures, you do not need to link these
libraries to your executables. (SP-9472)
SuSE Linux Enterprise Server 11 SP1
Executables using Sybase Access Module multithreaded dynamic libraries on SuSE Linux Enterprise
Server need to link the Sybase vendor libraries. Not linking the Sybase vendor libraries to the executable
has been observed to produce intermittent segmentation faults. The Sybase vendor libraries can
be linked directly or by linking the Sybase Access Module library to the executable. The Sybase Access
module examples link the Sybase Access Module library.
As these failures are intermittent, if you do not observe these failures, you do not need to link these
libraries to your executables. (SP-8505/RW# 32062)
Red Hat Enterprise Linux 5
Executables using Sybase Access Module multithreaded dynamic libraries on Red Hat Enterprise
Linux 5 need to link the Sybase vendor libraries. Not linking the Sybase vendor libraries to the executable
has been observed to produce intermittent segmentation faults. The Sybase vendor libraries can
be linked directly or by linking the Sybase Access Module library to the executable. The Sybase Access
Module examples link the Sybase Access Module library. As these failures are intermittent, if you do
not observe these failures, you do not need to link these libraries to your executables. (SP-9426)
Oracle Heterogeneous Services: When using Oracle Heterogeneous Services for
SQL execution, you need to use explicit Transaction Management using
beginTransaction() and commitTransaction(). By default, this module uses
OCI_COMMIT_ON_SUCCESS, whereas heterogeneous services require transactions.
Oracle and LONG columns: When a result set fetched from Oracle has a LONG
column in it and no buffer is bound for the LONG column, then Oracle returns either
“ORA-03106: fatal two-task communication protocol” or “ORA-00127 dispatcher
%s does not exist.” (Oracle bug #4919068 / SP-8671)
Breaking out of polling operations with OCIBreak: Calling OCIBreak to terminate
polling operations doesn't work. This results in ORA-03127 when the next
operation is attempted on the connection. OCIBreak is called when:
Reading into a RWDBTBuffer<char> when the buffer is not large enough to
hold the data.
Returning false or throwing an exception from
This has been identified as Oracle bug #10606993.
Using SYS.XMLTYPE datatype: The Oracle datatypes SYS.XMLTYPE is supported
by SourcePro DB, but extra steps are required in some cases. When inserting data
using RWDBInserter, to use the best transfer mechanism the DB Interface Module needs to know that the underlying table has a SYS.XMLTYPE column. The easiest way to do this is by calling the RWDBTable's fetchSchema() method before creating your RWDBInserter instance.
Here's an example that demonstrates this:
RWDBTable foo = myDb.table("foo");
RWDBInserter ins = foo.inserter();
int c;
RWCString xml;
// fill in data ...
ins << c << xml;
Applications using the Oracle Access Module on HPUX 11i v3 crash with a bus error if the first connection
established by the application is inside a child thread. Increasing the thread stack size using
thread_attr_setstacksize() resolves the issue (SP-9006).
Applications using Oracle Access Module on HPUX 11i v3 intermittently crash with a segmentation
fault when executing OCIEnvCreate. This occurs when using the Oracle 32-bit Client library.
Oracle issue 9808368 discusses this problem and potential resolutions. (SP-12341)
Red Hat Enterprise Linux, Intel C++ Compilers
Using the Intel C++ compiler may result in unresolved symbols errors. Supplying the path to the lib
subdirectory of the compiler installation as the first path for the linker to search for libraries (for example:
-L<path to compiler>/lib) resolves the errors. (SP-8484)
In addition, the path to the Intel libraries should also appear before the path to the Oracle libraries in
the LD_LIBRARY_PATH environment variable. (SP-8585)
Non-blocking secure sockets are not supported in this release.
Clients using SSLv2 may no longer be able to connect to servers using
TLSv1WithFallback. This is because the default cipher list used by OpenSSL 1.0.0
and later no longer include the necessary ciphers for this fallback to work.
While it is strongly encouraged to avoid using SSLv2, fallback support for SSLv2 can be
enabled by enabling the necessary ciphers on a context. The following code snippet
RWSecureSocketContext context;
The DaytimeMulticast example can hang on machines with multiple network
The DaytimeMulticast server and client example should be executed on a machine that has
a single active network adapter.
The Secure Communication Module depends on the underlying Cryptographic library being installed,
built, and working correctly before the Secure Communication Module is built. The following section
details installation requirements on your platform.
Telling RCB Where Your C Cryptography Library is Located
When using RCB to build the Secure Sockets package, you are prompted to select which
cryptography library you are using and to enter the directory where it is installed.
It is important to note that the directory you specify will have /lib and /include
appended to it in the makefiles that RCB creates. Therefore the directory you enter should
be the directory that has lib and include subdirectories.
If the library files are installed in /usr/local/ssl/lib and the headers are
located in /usr/local/ssl/include, then the common root directory that RCB
expects is /usr/local/ssl.
Likewise on Windows, if the library files are installed in D:\ssl\lib and the
header files are in D:\ssl\include, then the common root directory that RCB
expects is D:\ssl.
Currency Module (only)
Accessing prototypical values (SP-10282)
To access the prototypical values:
described in the manual you must use the (undocumented) static member functions:
RWDecimal<T> RWDecimal<T>::nullValue();
RWDecimal<T> RWDecimal<T>::missingValue();
RWDecimal<T> RWDecimal<T>::NaNValue();
RWDecimal<T> RWDecimal<T>::SNaNValue()
RWDecimal<T> RWDecimal<T>::infinityValue()
Floating Point Variables
Gcc compiler optimizations include storing floating point variables in registers. On some
machines this results in greater precision than a double should have.
According to the gcc man page:
"For most programs, the excess precision does only good, but a few
programs rely on the precise definition of IEEE floating point.
Use `-ffloat-store' for such programs."
This advice applies to portions of the Currency Module code, and we have disabled this
particular optimization for non-debug library builds and example-program builds by adding
the -ffloat-store option to the compiler command line.
We strongly recommend that you add -ffloat-store to the command line of any nondebug
programs built using the Currency Module and the gcc compiler.
Currency Module (only)
Floating Point Variables
Intel C++ compiler optimizations include storing floating point variables in registers. On
some machines this results in greater precision than a double should have.
According to the Intel C++ compiler User's Guide:
"The -mp option restricts optimization to maintain declared precision
and to ensure that floating-point arithmetic conforms more closely to
the ANSI and IEEE standards. For most programs, specifying this option
adversely affects performance. If you are not sure whether your
application needs this option, try compiling and running your program
both with and without it to evaluate the effects on both performance
and precision."
This advice applies to portions of the Currency Module code.
We strongly recommend that you add -mp to the command line of any non-debug programs
built using the Currency Module and the Intel C++ compiler.
Inexact exception for results with insignificant trailing zeros
Multiplication where the result contains insignificant trailing zeros may cause an inexact exception to
be thrown, even if the result is represented exactly (SP-10262). In the following example, in which the
class RWDecimal< RWMultiPrecisionInt<2> > can represent numbers with 18 decimal digits, an inexact
exception will be generated:
RWDecimal< RWMultiPrecisionInt<2> > valA = "5282.80977864";
RWDecimal< RWMultiPrecisionInt<2> > valB = "1000000000";
RWDecimal< RWMultiPrecisionInt<2> > valMul = valA*valB;
cout << "valA : " << valA << endl;
cout << "valB : " << valB << endl;
cout << "valMul: " << valMul << endl;
The program creates the following output:
[MULINEXACT] RWDecimal: inexact result in multiplication
valA : 5282.80977864
valB : 1000000000
valMul : 5282809778640.00000 // 18 digit result still exact
In one sense, the inexact exception is correct, since a certain number of significant digits are lost in the
calculation. It just happens that those digits are all zeros.
Some Math Examples Require an Input File
Some of the Math Module's example programs require an input file. These input
files are located inside the installdir\examples\math in directory, and are
required by examples one, two, and eight.
You can modify these input files to try the examples with different input data.
Inter-document Hyperlinks do not Work in the PDF Documents
The PDF documents shipped with SourcePro C++ are provided so customers can print the documents
if they wish. These documents are not intended as primary access to the product documentation, and
may not be as fully functional as the HTML documentation. One known issue is that hyperlinks
between these documents do not work, and other issues may exist.
Bug fixes completed in release 12.0.1 are denoted by the prefix “[12.0.1]”.
Eliminate include order dependencies in SourcePro C++ (SP-12786).
An incorrect result is returned when searching for a non-existent element in
RWTValSortedDlist<T> (SP-13182).
An infinite loop occurs when merging RWTValSortedDlist<T> with self (SP-
RWTPtrVector inconsistently and unnecessarily allocates zero byte arrays (SP-
RWWTokenizer maintains a non-const pointer to an internal string which can
result in undefined behavior (SP-13165).
Valgrind UMR: A conditional jump or move depends on uninitialized value(s) in
filemanager/btreeondisk (SP-13319).
Fix free memory read in RWTValHashMultiSet<T>::intersection() (SP-13303).
Possible data truncation in RWBitVec::resize() and
Remove dead code from file rw/rwtsd.h (SP-12787).
RWCConstSubString does not define overloads for operator[](long long) and
operator[](unsigned long long)(SP-12812).
Valgrind UMR: A conditional jump or move depends on uninitialized value(s) in
estream (SP-13327).
RWCString::compareTo() and RWWString::compareTo() methods have
inconsistent arguments with their related variants in other SourcePro Core
Essential Tools classes (SP-6069).
RWCString::hash() member function returns unsigned long but is documented
to return unsigned. (SP-9171).
RWCString::operator[](long long) is incorrect for values greater than
RWCString::operator==() should be a global function instead of declared as
member function (SP-12681).
RWCSubString and RWCConstSubString do not bounds check substrings correctly
RWDateTime::asString() formats some ISO-8601 strings incorrectly for time
zones with sub-minute offsets (SP-8274).
RWDateTime::asString(RWDateTime::iso8601) does not correctly handle time
zones with second offsets (SP-13192).
RWTBitVec<N>::operator<() doesn't behave correctly if N is greater than 8 (SP-
RWWString global operator<<(std::wostream& os, const RWWString& str)
is used before declared (SP-12785).
RWxmsg assignment behavior is not consistent with copy construction (SP-10202).
RWxmsg constructor does not behave as expected (SP-10176).
Purify UMR: Uninitialized memory read occurs in
RWRegexAlternator::addBetaState() (SP-13306).
Purify UMR: Uninitialized memory read occurs when calling memcmp (SP-13312).
Purify MLK: Memory leak in RW[e,b][i,o]stream (SP-13384).
RWObjectInputStream::getString(std::string&) does not handle embedded
nulls (SP-12767).
RWSymbol::getSeqNum() is not thread-safe (SP-12926).
RWBarrier does not guarantee that a thread will wait (SP-12671).
RWTThreadLocal cleanup is executed before RWThread is completely destroyed
Calling RWDBTable::fetchSchema() on a table with an unsupported datatype
causes the RWDBConnection to become invalid (SP-12753).
Multithread lifetime issue occurs when destroying RWDBInserter instances that
were used with asynchronous connections (SP-12817).
RWDBResult::rowsAffected() returns previous execution's value when current
execution fails (SP-12688).
RWDBValue::asString() long double decimal precision values are not observed
on different operating systems (SP-9473).
Remove deprecated function RWDBConnection::autoCommit() (SP-6728).
Fix multithread race conditions in SourcePro DB Interface Module, MS-SQL Access
Module, ODBC Access Module and DB2 Access Module. (SP-12987).
Update DB2 Access Module error handler code to check for additional error codes
Multithreading race condition in RWDBManagerProxy can cause hangs during
connection initialization (SP-12511).
[12.0.1] DB2 hangs intermittently on Windows Server 2008 and Vista (SP-13271).
[12.0.1] Uninitialized memory read related to memcmp and strlen usage in DB2
Access Module (SP-13335).
[12.0.1] Access violation if an error occurrs when allocating an env handle (SP-
RWDBStoredProc with output parameters of type varchar(max) and
varbinary(max) fails to return the correct value (SP-10286).
[12.0.1] Uninitialized memory read in RWDBBuffer::value (SP-13337).
RWDBMySqlLibDatabaseImp::dbTables() uses incorrect type of deallocator for
RWDBWrapper (SP-12197).
Fix RWWString support (and add RWBasicUString support (SP-13256).
RWDBInserter::asString() yields a different result before and after
RWDBInserter::execute() (SP-6395).
RWDBStoredProc with a return value of type LONG clears pending result data on a
call to RWDBStoredProc::returnValue()(SP-3590).
Not all errors from Sybase API calls are reported to the user via the error handler
Sybase Access Module will assert when the same RWDBOSql instance is re-used
for statement execution (SP-12013).
Purify UMR in function RWDBSybCtLibUtilities::serverVersion (SP-13344).
Purify UMR in function RWDBSybCtLibDatabaseImp::cleanUp (SP-13345).
[12.0.1] RWDBBulkInserter fails to insert long long data in Sybase in column of
type NUMERIC (SP-14016).
[12.0.1] Invalid/Uninitialized memory reads in Sybase Access Module (SP-14277).
Including winsock.h or winsock2.h before rw/network/pkgdefs.h causes a
compiler error (SP-10241).
rwSocketSelect throws an RWNetSelectError if the vector of RWSocketAttribute
instances has more than FD_SETSIZE unique sockets using the same attribute (SP-
rwSocketSelect doesn't check for overflow when determining the timeout (SP-
Suspicious dereference of pointer occurs in RWInetHost.cpp (SP-8370).
The copy and assignment operators of RWPortalImp are not hidden and could be
used in a derived class (SP-8386).
Requests issued through RWHttpAgent do not use timeout when waiting to receive
data (SP-12605).
RWHttpPortalImp::getChunkSize() function should return size_t instead of
int. (SP-9357).
RWHttpSocketClient incorrectly treats simultaneously reading/writing to a
SOCK_STREAM socket in full-duplex mode as an error state. (SP-13032).
RWHttpSocketClientImp::isConnected_() and
RWHttpSecureSocketClientImp::isConnected_() have a race condition (SP-
RWMimeUtils::getUniqueBoundary() function uses incorrect format specifier.
Connections using RWHttpAgent are not reused. (SP-13178).
[12.0.1] Error with active data connections on hosts with multiple network
addresses (SP-13575).
Multithread deadlock is possible in RWSecureSocketPackageInit when multiple
sockets are being initialized. (SP-12964).
RWSecureSocket::connect() has a race condition on rebind (SP-10244).
Remove the RWSocket::shutdown() call from RWSecureSocket::shutdown() (SP-
rwSecureSocketSelect incorrectly rounds timeout values down to nearest whole
second (SP-10251).
rwSecureSocketSelect needs to have the same behavior as rwSocketSelect (SP-
Memory leak in RWBRNGeneratorBase::scanFrom() and
RWBRNGeneratorBase::restoreFrom() methods (SP-9382).
RWMathVecConstIterator::operator-=() does not compile (SP-13381).
[12.0.1] Potential memory alignment issue when built with 32-bit MKL (SP-14240).

This article was:   Helpful | Not helpful
Report an issue
Article ID: 2065
Last updated: 11 Apr, 2018
Revision: 3
Views: 53264
Posted: 17 Jul, 2013 by --
Updated: 11 Apr, 2018 by

Others in this category