Chapter 5. Notable changes in RHEL 10
The following are important changes that occur in RHEL 10.
5.1. Compatibility breaking changes in C++
std::condition_variable::wait
is now a thread cancellation point
In GCC 11 and earlier, the std::condition_variable::wait
function was noexcept
, which made it incompatible with thread cancellation. As a result, if a call to pthread_cancel
cancelled a thread blocked in std::condition_variable::wait
, the process would be terminated. In GCC 12 and later, std::condition_variable::wait
can be cancelled by calls to the pthread_cancel
function, which unwinds the stack. If you have code that depends on wait
never throwing an exception, review the code and take appropriate action.
Deprecated class templates
Certain class templates have been deprecated in new versions of C++ and produce warning diagnostics in GCC 12 and later:
The following class templates have been deprecated in C++11 and later:
-
std::unary_function
-
std::binary_function
-
-
The
std::iterator
class template has been deprecated in C++17 and later.
To prevent the warning diagnostics, you can take one of the following actions:
When you do not want to make other changes to the code, silence the warning diagnostics by using GCC’s diagnostic pragmas. For example:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored “-Wdeprecated-declarations” class Functor : public std::unary_function<int, int> { /* … */ }; #pragma GCC diagnostic pop
#pragma GCC diagnostic push #pragma GCC diagnostic ignored “-Wdeprecated-declarations” class Functor : public std::unary_function<int, int> { /* … */ }; #pragma GCC diagnostic pop
Copy to Clipboard Copied! When you want your code to be compatible with later versions of C++, replace these class templates in the code with nested typedefs. For example, you can replace a
std::unary_function
base class withresult_type
andargument_type
typedefs:class Functor { using result_type = int; using argument_type = int; /* … */ };
class Functor { using result_type = int; using argument_type = int; /* … */ };
Copy to Clipboard Copied!
5.2. Compatibility breaking changes to glibc
Changes to how the dynamic linker finds shared objects
The following list describes changes to the dynamic linker search algorithm:
-
The dynamic linker no longer loads shared objects from the
tls
subdirectories on the library search path or the subdirectory that corresponds to theAT_PLATFORM
system name. -
The dynamic linker no longer searches subdirectories named after the legacy
AT_HWCAP
search mechanism.
Port your applications to the glibc-hwcaps
mechanism, which has been available since RHEL 8.4.
Removed catchsegv
script and libSegFault.so
shared object
The catchsegv
script and associated libSegFault.so
shared object have been removed. You can use an out-of-process alternative for intercepting coredumps and backtraces, such as systemd-coredump
and coredumpctl
.
5.3. C23 support
C2X support in glibc
The GNU C Library has added some new features that are part of the C23 standard. For more information, see the glibc
manual.