From 8c630a8beaff2b1cff36f9dd1178db2995af160d Mon Sep 17 00:00:00 2001 From: Zephyron Date: Tue, 28 Jan 2025 16:20:54 +1000 Subject: [PATCH] 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. --- src/core/hle/service/sockets/sockets.h | 1 + src/core/hle/service/sockets/sockets_translate.cpp | 2 ++ src/core/internal_network/network.h | 1 + vcpkg.json | 2 +- 4 files changed, 5 insertions(+), 1 deletion(-) 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 2e0f68c2e..78905ca60 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 180232afd..8fa0de0c2 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": "citron", - "builtin-baseline": "7adc2e4d49e8d0efc07a369079faa6bc3dbb90f3", + "builtin-baseline": "c82f74667287d3dc386bce81e44964370c91a289", "version": "1.0", "dependencies": [ "boost-algorithm",