From ae2d5c1b41ad1af9af19f8962eda544ca8ee4bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 28 Jan 2025 13:24:02 +0100 Subject: [PATCH 1/2] getLocalIp: Have the fallback path keep looking if the IP found is 127.0.0.1 Fixes #19919 --- Core/HLE/proAdhoc.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Core/HLE/proAdhoc.cpp b/Core/HLE/proAdhoc.cpp index 4db5c5854ae7..cd936f8331b1 100644 --- a/Core/HLE/proAdhoc.cpp +++ b/Core/HLE/proAdhoc.cpp @@ -1795,7 +1795,7 @@ int getLocalIp(sockaddr_in* SocketAddress) { // Fallback if not connected to AdhocServer // getifaddrs first appeared in glibc 2.3, On Android officially supported since __ANDROID_API__ >= 24 -#if defined(_IFADDRS_H_) || (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__ANDROID_API__ >= 24) +#if (defined(_IFADDRS_H_) || (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__ANDROID_API__ >= 24)) struct ifaddrs* ifAddrStruct = NULL; struct ifaddrs* ifa = NULL; @@ -1808,7 +1808,11 @@ int getLocalIp(sockaddr_in* SocketAddress) { if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4 // is a valid IP4 Address SocketAddress->sin_addr = ((struct sockaddr_in*)ifa->ifa_addr)->sin_addr; - break; + u32 addr = ((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr; + if (addr != 0x0100007f) { // 127.0.0.1 + // Found a plausible one + break; + } } } freeifaddrs(ifAddrStruct); From ccf814bcd0253b6320d598d0f258dda9106083f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 28 Jan 2025 13:25:05 +0100 Subject: [PATCH 2/2] Some shutdown logging improvements --- Common/Net/HTTPClient.cpp | 4 ++-- Core/RetroAchievements.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Common/Net/HTTPClient.cpp b/Common/Net/HTTPClient.cpp index f3608ebe0436..83509bab629e 100644 --- a/Common/Net/HTTPClient.cpp +++ b/Common/Net/HTTPClient.cpp @@ -159,7 +159,7 @@ bool Connection::Connect(int maxTries, double timeout, bool *cancelConnect) { selectResult = select(maxfd, nullptr, &fds, nullptr, &tv); if (cancelConnect && *cancelConnect) { - WARN_LOG(Log::HTTP, "connect: cancelled (1)"); + WARN_LOG(Log::HTTP, "connect: cancelled (1): %s:%d", host_.c_str(), port_); break; } } @@ -183,7 +183,7 @@ bool Connection::Connect(int maxTries, double timeout, bool *cancelConnect) { } if (cancelConnect && *cancelConnect) { - WARN_LOG(Log::HTTP, "connect: cancelled (2)"); + WARN_LOG(Log::HTTP, "connect: cancelled (2): %s:%d", host_.c_str(), port_); break; } diff --git a/Core/RetroAchievements.cpp b/Core/RetroAchievements.cpp index 6aaaad0a64e1..1d71a955136c 100644 --- a/Core/RetroAchievements.cpp +++ b/Core/RetroAchievements.cpp @@ -746,16 +746,20 @@ void UpdateSettings() { bool Shutdown() { g_activeChallenges.clear(); + if (g_rcClient) { #ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION - rc_client_unload_raintegration(g_rcClient); + rc_client_unload_raintegration(g_rcClient); #endif - rc_client_destroy(g_rcClient); - g_rcClient = nullptr; - INFO_LOG(Log::Achievements, "Achievements shut down."); + rc_client_destroy(g_rcClient); + g_rcClient = nullptr; + INFO_LOG(Log::Achievements, "Achievements shut down."); + } return true; } void ResetRuntime() { + if (!g_rcClient) + return; INFO_LOG(Log::Achievements, "Resetting rcheevos state..."); rc_client_reset(g_rcClient); g_activeChallenges.clear();