From 1393bf3d84c510de39f2a35c814773fe6105ff1a Mon Sep 17 00:00:00 2001 From: past-due <30942300+past-due@users.noreply.github.com> Date: Sun, 2 Feb 2025 14:15:36 -0500 Subject: [PATCH] Fix: Crash on exit if TCP_DIRECT connection provider is not registered Make ConnectionProviderRegistry::Deregister handle calling WzConnectionProvider::shutdown() --- lib/netplay/connection_provider_registry.cpp | 11 ++++++++++- lib/netplay/netplay.cpp | 1 - 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/netplay/connection_provider_registry.cpp b/lib/netplay/connection_provider_registry.cpp index b68e7c8c331..a8c32900b9c 100644 --- a/lib/netplay/connection_provider_registry.cpp +++ b/lib/netplay/connection_provider_registry.cpp @@ -53,5 +53,14 @@ void ConnectionProviderRegistry::Register(ConnectionProviderType pt) void ConnectionProviderRegistry::Deregister(ConnectionProviderType pt) { - registeredProviders_.erase(pt); + const auto it = registeredProviders_.find(pt); + if (it == registeredProviders_.end()) + { + return; + } + if (it->second) + { + it->second->shutdown(); + } + registeredProviders_.erase(it); } diff --git a/lib/netplay/netplay.cpp b/lib/netplay/netplay.cpp index 2908cdfdc82..65465828249 100644 --- a/lib/netplay/netplay.cpp +++ b/lib/netplay/netplay.cpp @@ -1606,7 +1606,6 @@ int NETshutdown() } NetPlay.MOTD = nullptr; NETdeleteQueue(); - ConnectionProviderRegistry::Instance().Get(ConnectionProviderType::TCP_DIRECT).shutdown(); ConnectionProviderRegistry::Instance().Deregister(ConnectionProviderType::TCP_DIRECT); // Reset net usage statistics.