From e4c234ac1569754a6aac7c6c7a0d9311e4247dc2 Mon Sep 17 00:00:00 2001 From: Mate Barany Date: Thu, 27 Jun 2024 15:43:27 +0200 Subject: [PATCH] Remove the struct NetlinkSocket Started with fixing a "Class with destructor should also declare a copy or move constructor and assignment operator." warning found by an Axivion scan. However, the NetlinkSocket struct is used only once and the behavior can be replicated with a qScopeGuard. Remove the struct NetlinkSocket and use a qScopeGuard for resource management. Drive-by: remove a Q_UNLIKELY that's not needed (qErrnoWarning() is already marked as Q_DECL_COLD_FUNCTION). Task-number: QTBUG-125026 Pick-to: 6.7 6.5 Change-Id: I6b770e284fdda3ff97b8cabac205e9b5abe88b14 Reviewed-by: Marc Mutz Reviewed-by: Thiago Macieira (cherry picked from commit 954bf6e18eb691ea95dab866831492a4494eff03) Reviewed-by: Qt Cherry-pick Bot --- .../kernel/qnetworkinterface_linux.cpp | 35 ++++++------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/network/kernel/qnetworkinterface_linux.cpp b/src/network/kernel/qnetworkinterface_linux.cpp index 89374d2c4c..a12a16d1f7 100644 --- a/src/network/kernel/qnetworkinterface_linux.cpp +++ b/src/network/kernel/qnetworkinterface_linux.cpp @@ -9,6 +9,7 @@ #include #include +#include #include // according to rtnetlink(7) @@ -85,28 +86,6 @@ static QNetworkInterface::InterfaceType probeIfType(int socket, struct ifreq *re namespace { -struct NetlinkSocket -{ - int sock; - Q_NODISCARD_CTOR explicit NetlinkSocket(int bufferSize) - { - sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); - if (Q_UNLIKELY(sock == -1)) - qErrnoWarning("Could not create AF_NETLINK socket"); - - // set buffer length - socklen_t len = sizeof(bufferSize); - setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, len); - } - - ~NetlinkSocket() - { - if (sock != -1) - qt_safe_close(sock); - } - - operator int() const { return sock; } -}; template struct ProcessNetlinkRequest { @@ -406,9 +385,17 @@ QList QNetworkInterfaceManager::scan() { // open netlink socket QList result; - NetlinkSocket sock(BufferSize); - if (Q_UNLIKELY(sock == -1)) + int sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE); + if (sock == -1) { + qErrnoWarning("Could not create AF_NETLINK socket"); return result; + } + + const auto sg = qScopeGuard([&] { qt_safe_close(sock); }); + + // set buffer length + const int bufferSize = BufferSize; + setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize)); QByteArray buffer(BufferSize, Qt::Uninitialized); char *buf = buffer.data();