Add missing noexcept specifiers for QUniqueHandle handle traits

Handle traits should be simple, and not require exceptions. Note that
we should not make calls to fclose() or close() noexcept, because these
are POSIX cancellation points.

Change-Id: I8bbf573b1346eafd52c6080dbb024f8b3bc89359
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit a80d1bf2716b1ba404799d6a09003b145b73b079)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 64c5043a40c061c5910d755752bcc3f776298cf4)
This commit is contained in:
Jøger Hansegård 2025-01-04 20:08:17 +01:00 committed by Qt Cherry-pick Bot
parent 8e0403625c
commit 238acbdf8b
2 changed files with 6 additions and 4 deletions

View File

@ -19,12 +19,12 @@ namespace QtUniqueHandleTraits {
#ifdef Q_OS_WIN
bool InvalidHandleTraits::close(Type handle)
bool InvalidHandleTraits::close(Type handle) noexcept
{
return ::CloseHandle(handle);
}
bool NullHandleTraits::close(Type handle)
bool NullHandleTraits::close(Type handle) noexcept
{
return ::CloseHandle(handle);
}
@ -33,11 +33,13 @@ bool NullHandleTraits::close(Type handle)
bool FileDescriptorHandleTraits::close(Type handle)
{
// not noexcept because close() is a POSIX cancellation point
return QT_CLOSE(handle) == 0;
}
bool FILEHandleTraits::close(Type handle)
{
// not noexcept because fclose() is a POSIX cancellation point
return ::fclose(handle);
}

View File

@ -33,14 +33,14 @@ struct InvalidHandleTraits
{
return Qt::HANDLE(-1); // AKA INVALID_HANDLE_VALUE
}
Q_CORE_EXPORT static bool close(Type handle);
Q_CORE_EXPORT static bool close(Type handle) noexcept;
};
struct NullHandleTraits
{
using Type = Qt::HANDLE;
static Type invalidValue() noexcept { return nullptr; }
Q_CORE_EXPORT static bool close(Type handle);
Q_CORE_EXPORT static bool close(Type handle) noexcept;
};
#endif