From 52ddb0efd9acee395d3ab58e338ac03f4b61a4e5 Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Sat, 6 Apr 2024 20:41:51 +0100 Subject: [PATCH] DEV9: Increase allowed number of to be ACKed tcp packets --- pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp | 5 +++++ pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h | 1 + pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_In.cpp | 5 +++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp index f86d2c3cd2..2a08eae80d 100644 --- a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp +++ b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp @@ -55,6 +55,11 @@ namespace Sessions std::lock_guard numberlock(myNumberSentry); return GetDelta(_MySequenceNumber, _ReceivedAckNumber); } + bool TCP_Session::ShouldWaitForAck() + { + std::lock_guard numberlock(myNumberSentry); + return _OldMyNumbers[0] == _ReceivedAckNumber; + } std::tuple> TCP_Session::GetAllMyNumbers() { std::lock_guard numberlock(myNumberSentry); diff --git a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h index 800466d219..09109af5c8 100644 --- a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h +++ b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h @@ -93,6 +93,7 @@ namespace Sessions void UpdateReceivedAckNumber(u32 ack); u32 GetMyNumber(); u32 GetOutstandingSequenceLength(); + bool ShouldWaitForAck(); std::tuple> GetAllMyNumbers(); void ResetMyNumbers(); diff --git a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_In.cpp b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_In.cpp index fde4339d29..8a8eeb50c5 100644 --- a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_In.cpp +++ b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_In.cpp @@ -67,6 +67,8 @@ namespace Sessions return nullptr; } + if (ShouldWaitForAck()) + return nullptr; //Note, windowSize will be updated before _ReceivedAckNumber, potential race condition //in practice, we just get a smaller or -ve maxSize @@ -78,8 +80,7 @@ namespace Sessions else maxSize = std::min(maxSegmentSize, windowSize.load() - outstanding); - if (maxSize > 0 && - myNumberACKed.load()) + if (maxSize > 0) { std::unique_ptr buffer; int err = 0;