diff --git a/wpinet/src/main/native/cpp/MulticastHandleManager.cpp b/wpinet/src/main/native/cpp/MulticastHandleManager.cpp index d249a1c6a9..ab44da895a 100644 --- a/wpinet/src/main/native/cpp/MulticastHandleManager.cpp +++ b/wpinet/src/main/native/cpp/MulticastHandleManager.cpp @@ -10,3 +10,17 @@ MulticastHandleManager& wpi::GetMulticastManager() { static MulticastHandleManager manager; return manager; } + +#ifdef _WIN32 +MulticastHandleManager::~MulticastHandleManager() { + // Multicast handles cannot be safely destructed on windows during shutdown. + // Just leak all handles. + for (auto&& i : resolvers) { + i.second.release(); + } + + for (auto&& i : announcers) { + i.second.release(); + } +} +#endif diff --git a/wpinet/src/main/native/cpp/MulticastHandleManager.h b/wpinet/src/main/native/cpp/MulticastHandleManager.h index 8c070f74a6..9925e84ff0 100644 --- a/wpinet/src/main/native/cpp/MulticastHandleManager.h +++ b/wpinet/src/main/native/cpp/MulticastHandleManager.h @@ -20,6 +20,9 @@ struct MulticastHandleManager { resolvers; wpi::DenseMap> announcers; +#ifdef _WIN32 + ~MulticastHandleManager(); +#endif }; MulticastHandleManager& GetMulticastManager();