summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZephyron <zephyron@citron-emu.org>2025-01-28 16:20:54 +1000
committerMike Lothian <mike@fireburn.co.uk>2025-05-11 14:29:04 +0100
commit78d43b234ffbbb81cf825555c91c097c240ecb06 (patch)
tree7220016a47980b56b3bbcfb2953feb16afb94cac
parentf138e075562f81d212f1399f102d1f832862eb5e (diff)
network: Add NOMEM errno handling for socket operations
Implements support for ENOMEM (errno 12) across the network stack: - Added NOMEM to Network::Errno enum - Added NOMEM = 12 to sockets Errno enum - Added translation case in sockets_translate.cpp This is the first step towards addressing the 0.0 FPS bug that occurs when the system runs out of memory during socket operations. Previously, these operations would trigger an unimplemented assertion, causing the emulator to halt. Now the error will be properly propagated to the guest application.
-rw-r--r--src/core/hle/service/sockets/sockets.h1
-rw-r--r--src/core/hle/service/sockets/sockets_translate.cpp2
-rw-r--r--src/core/internal_network/network.h1
-rw-r--r--vcpkg.json2
4 files changed, 5 insertions, 1 deletions
diff --git a/src/core/hle/service/sockets/sockets.h b/src/core/hle/service/sockets/sockets.h
index f3ea31bde..978796455 100644
--- a/src/core/hle/service/sockets/sockets.h
+++ b/src/core/hle/service/sockets/sockets.h
@@ -26,6 +26,7 @@ enum class Errno : u32 {
TIMEDOUT = 110,
CONNREFUSED = 111,
INPROGRESS = 115,
+ NOMEM = 12,
};
enum class GetAddrInfoError : s32 {
diff --git a/src/core/hle/service/sockets/sockets_translate.cpp b/src/core/hle/service/sockets/sockets_translate.cpp
index 21bb3e776..b9a3ba029 100644
--- a/src/core/hle/service/sockets/sockets_translate.cpp
+++ b/src/core/hle/service/sockets/sockets_translate.cpp
@@ -37,6 +37,8 @@ Errno Translate(Network::Errno value) {
return Errno::CONNRESET;
case Network::Errno::INPROGRESS:
return Errno::INPROGRESS;
+ case Network::Errno::NOMEM:
+ return Errno::NOMEM;
default:
UNIMPLEMENTED_MSG("Unimplemented errno={}", value);
return Errno::SUCCESS;
diff --git a/src/core/internal_network/network.h b/src/core/internal_network/network.h
index b7b7d773a..ecfb591c0 100644
--- a/src/core/internal_network/network.h
+++ b/src/core/internal_network/network.h
@@ -46,6 +46,7 @@ enum class Errno {
MSGSIZE,
INPROGRESS,
OTHER,
+ NOMEM,
};
enum class GetAddrInfoError {
diff --git a/vcpkg.json b/vcpkg.json
index 45e5f046b..3cb38cdbf 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -1,7 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
"name": "yuzu",
- "builtin-baseline": "7adc2e4d49e8d0efc07a369079faa6bc3dbb90f3",
+ "builtin-baseline": "c82f74667287d3dc386bce81e44964370c91a289",
"version": "1.0",
"dependencies": [
"boost-algorithm",