From 2840b7620bad6b685301db93c29a12cc091ef4ab Mon Sep 17 00:00:00 2001 From: ubergamer-pie <16+ubergamer-pie@noreply.localhost> Date: Tue, 4 Aug 2026 22:19:29 +0000 Subject: [PATCH] fix psvita being in trial mode + play game button freezing the entire game (#22) fixed lock crash and enabled full mode for vita --------- Co-authored-by: 552eden <552eden@gmail.com> Reviewed-on: https://gitea.str1k3r.xyz/pieeebot/cafeberry/pulls/22 Co-authored-by: ubergamer-pie <16+ubergamer-pie@noreply.localhost> --- .../Common/Network/NetworkSocketLayer.cpp | 29 +++++++++++++------ Minecraft.Client/PSVita/PSVita_Minecraft.cpp | 7 +++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp b/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp index 62edc33f..9e45a79c 100644 --- a/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp +++ b/Minecraft.Client/Common/Network/NetworkSocketLayer.cpp @@ -57,6 +57,9 @@ std::vector NetworkSocketLayer::s_disconnectedSmallIds; CRITICAL_SECTION NetworkSocketLayer::s_freeSmallIdLock; std::vector NetworkSocketLayer::s_freeSmallIds; +// only goes true on a successful Initialize(), and a failed one gets retried +static bool s_locksCreated = false; + bool g_MultiplayerHost = false; bool g_MultiplayerJoin = true; int g_MultiplayerPort = NETWORK_LAN_DEFAULT_PORT; @@ -65,6 +68,19 @@ char g_MultiplayerIP[256] = "127.0.0.1"; bool NetworkSocketLayer::Initialize() { if (s_initialized) return true; + + // Create the locks before touching the platform network stack. + if (!s_locksCreated) + { + InitializeCriticalSection(&s_sendLock); + InitializeCriticalSection(&s_connectionsLock); + InitializeCriticalSection(&s_advertiseLock); + InitializeCriticalSection(&s_discoveryLock); + InitializeCriticalSection(&s_disconnectLock); + InitializeCriticalSection(&s_freeSmallIdLock); + s_locksCreated = true; + } + #if defined _WINDOWS64 || defined _XBOX WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); @@ -95,19 +111,13 @@ bool NetworkSocketLayer::Initialize() param.flags = 0; int result = sceNetInit(¶m); - if (result < 0) { - app.DebugPrintf("sceNetInit failed: %d\n", result); + // libnet is brought up before us by the platform layer, which reports EBUSY here. + if (result < 0 && result != SCE_NET_ERROR_EBUSY) { + app.DebugPrintf("sceNetInit failed: 0x%08x\n", result); return false; } #endif - InitializeCriticalSection(&s_sendLock); - InitializeCriticalSection(&s_connectionsLock); - InitializeCriticalSection(&s_advertiseLock); - InitializeCriticalSection(&s_discoveryLock); - InitializeCriticalSection(&s_disconnectLock); - InitializeCriticalSection(&s_freeSmallIdLock); - s_initialized = true; StartDiscovery(); @@ -190,6 +200,7 @@ void NetworkSocketLayer::Shutdown() s_disconnectedSmallIds.clear(); DeleteCriticalSection(&s_freeSmallIdLock); s_freeSmallIds.clear(); + s_locksCreated = false; WSACleanup(); s_initialized = false; } diff --git a/Minecraft.Client/PSVita/PSVita_Minecraft.cpp b/Minecraft.Client/PSVita/PSVita_Minecraft.cpp index 9c8e9b51..ea26eb59 100644 --- a/Minecraft.Client/PSVita/PSVita_Minecraft.cpp +++ b/Minecraft.Client/PSVita/PSVita_Minecraft.cpp @@ -674,6 +674,13 @@ int main() // debug switch to trial version //ProfileManager.SetDebugFullOverride(false); +#ifdef DISABLE_PSN + // Set full mode. on DISABLE_PSN we cannot check if its trial or not. + ProfileManager.SetFullVersion(true); + ProfileManager.SetDebugFullOverride(true); + StorageManager.SetSaveDisabled(false); +#endif + //ProfileManager.AddDLC(2); StorageManager.SetDLCPackageRoot("DLCDrive"); #if 0