From 85c9f4d95ffd28db06da307ce7cd91f05c5aa789 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 26 Sep 2019 12:10:59 -0700 Subject: [PATCH 1/3] Use the FCDEBUG mechanism to throttle udt::Socket log-spam --- libraries/networking/src/udt/Socket.cpp | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index 20cb30dbd8..ff64389a25 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -239,11 +239,21 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc int pending = _udpSocket.bytesToWrite(); if (bytesWritten < 0 || pending) { int wsaError = 0; + static std::atomic previousWsaError = 0; #ifdef WIN32 wsaError = WSAGetLastError(); #endif - qCDebug(networking) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - " << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")" + QString errorString; + QDebug(&errorString) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - " + << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")" << (pending ? "pending bytes:" : "pending:") << pending; + + if (previousWsaError.exchange(wsaError) != wsaError) { + qCDebug(networking).noquote() << errorString; + } else { + HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); + } + #ifdef DEBUG_EVENT_QUEUE int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr; @@ -525,12 +535,22 @@ std::vector Socket::getConnectionSockAddrs() { void Socket::handleSocketError(QAbstractSocket::SocketError socketError) { int wsaError = 0; + static std::atomic previousWsaError = 0; #ifdef WIN32 wsaError = WSAGetLastError(); #endif int pending = _udpSocket.bytesToWrite(); - qCDebug(networking) << "udt::Socket (" << _udpSocket.state() << ") error - " << wsaError << socketError << "(" << _udpSocket.errorString() << ")" - << (pending ? "pending bytes:" : "pending:") << pending; + QString errorString; + QDebug(&errorString) << "udt::Socket (" << _udpSocket.state() << ") error - " << wsaError << socketError << + "(" << _udpSocket.errorString() << ")" << (pending ? "pending bytes:" : "pending:") + << pending; + + if (previousWsaError.exchange(wsaError) != wsaError) { + qCDebug(networking).noquote() << errorString; + } else { + HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); + } + #ifdef DEBUG_EVENT_QUEUE int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); qCDebug(networking) << "Networking queue size - " << nodeListQueueSize; From f17a1c17f300d8deb4c163de5271e3f1d64fd81f Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 26 Sep 2019 15:46:11 -0700 Subject: [PATCH 2/3] Only print Qt event-queue size on change of error code --- libraries/networking/src/udt/Socket.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index ff64389a25..fb33b04838 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -250,14 +250,13 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc if (previousWsaError.exchange(wsaError) != wsaError) { qCDebug(networking).noquote() << errorString; +#ifdef DEBUG_EVENT_QUEUE + int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); + qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr; +#endif // DEBUG_EVENT_QUEUE } else { HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); } - -#ifdef DEBUG_EVENT_QUEUE - int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); - qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr; -#endif // DEBUG_EVENT_QUEUE } return bytesWritten; @@ -547,14 +546,13 @@ void Socket::handleSocketError(QAbstractSocket::SocketError socketError) { if (previousWsaError.exchange(wsaError) != wsaError) { qCDebug(networking).noquote() << errorString; +#ifdef DEBUG_EVENT_QUEUE + int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); + qCDebug(networking) << "Networking queue size - " << nodeListQueueSize; +#endif // DEBUG_EVENT_QUEUE } else { HIFI_FCDEBUG(networking(), errorString.toLatin1().constData()); } - -#ifdef DEBUG_EVENT_QUEUE - int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread()); - qCDebug(networking) << "Networking queue size - " << nodeListQueueSize; -#endif // DEBUG_EVENT_QUEUE } void Socket::handleStateChanged(QAbstractSocket::SocketState socketState) { From 93a1cbdcf97650739cf85884e4ec0a51d95bc851 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Thu, 26 Sep 2019 16:45:29 -0700 Subject: [PATCH 3/3] Use direct initialization instead of copy initialization for atomics --- libraries/networking/src/udt/Socket.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/udt/Socket.cpp b/libraries/networking/src/udt/Socket.cpp index fb33b04838..3e1a56de51 100644 --- a/libraries/networking/src/udt/Socket.cpp +++ b/libraries/networking/src/udt/Socket.cpp @@ -239,7 +239,7 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc int pending = _udpSocket.bytesToWrite(); if (bytesWritten < 0 || pending) { int wsaError = 0; - static std::atomic previousWsaError = 0; + static std::atomic previousWsaError (0); #ifdef WIN32 wsaError = WSAGetLastError(); #endif @@ -534,7 +534,7 @@ std::vector Socket::getConnectionSockAddrs() { void Socket::handleSocketError(QAbstractSocket::SocketError socketError) { int wsaError = 0; - static std::atomic previousWsaError = 0; + static std::atomic previousWsaError(0); #ifdef WIN32 wsaError = WSAGetLastError(); #endif