From 709c553123be5b6b3884afb22b5d485bd38ddd87 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sun, 13 Oct 2024 00:14:16 -0700 Subject: [PATCH] [ntcore] Fix EALREADY errors by tracking read state (#7202) --- .../src/main/native/cpp/net/WebSocketConnection.h | 15 +++++++++++++-- .../main/native/cpp/net3/UvStreamConnection3.h | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/ntcore/src/main/native/cpp/net/WebSocketConnection.h b/ntcore/src/main/native/cpp/net/WebSocketConnection.h index 68102949e54..4d494ae0566 100644 --- a/ntcore/src/main/native/cpp/net/WebSocketConnection.h +++ b/ntcore/src/main/native/cpp/net/WebSocketConnection.h @@ -59,8 +59,18 @@ class WebSocketConnection final return m_ws.GetLastReceivedTime(); } - void StopRead() final { m_ws.GetStream().StopRead(); } - void StartRead() final { m_ws.GetStream().StartRead(); } + void StopRead() final { + if (m_readActive) { + m_ws.GetStream().StopRead(); + m_readActive = false; + } + } + void StartRead() final { + if (!m_readActive) { + m_ws.GetStream().StartRead(); + m_readActive = true; + } + } void Disconnect(std::string_view reason) final; @@ -80,6 +90,7 @@ class WebSocketConnection final wpi::WebSocket& m_ws; wpi::Logger& m_logger; + bool m_readActive = true; class Stream; diff --git a/ntcore/src/main/native/cpp/net3/UvStreamConnection3.h b/ntcore/src/main/native/cpp/net3/UvStreamConnection3.h index a27e04ada20..6cb81eea002 100644 --- a/ntcore/src/main/native/cpp/net3/UvStreamConnection3.h +++ b/ntcore/src/main/native/cpp/net3/UvStreamConnection3.h @@ -41,8 +41,18 @@ class UvStreamConnection3 final uint64_t GetLastFlushTime() const final { return m_lastFlushTime; } - void StopRead() final { m_stream.StopRead(); } - void StartRead() final { m_stream.StartRead(); } + void StopRead() final { + if (m_readActive) { + m_stream.StopRead(); + m_readActive = false; + } + } + void StartRead() final { + if (!m_readActive) { + m_stream.StartRead(); + m_readActive = true; + } + } void Disconnect(std::string_view reason) final; @@ -62,6 +72,7 @@ class UvStreamConnection3 final std::string m_reason; uint64_t m_lastFlushTime = 0; int m_sendsActive = 0; + bool m_readActive = true; }; } // namespace nt::net3