From ef4748289d3926bec0480c8c8e0e3627ad7628cb Mon Sep 17 00:00:00 2001 From: Neil Monday Date: Wed, 12 Feb 2025 10:38:54 -0500 Subject: [PATCH] Windows: Remove exception handler for pagemap on unloading (#746) Co-authored-by: Neil Monday --- src/snmalloc/pal/pal_windows.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/snmalloc/pal/pal_windows.h b/src/snmalloc/pal/pal_windows.h index 8e7bcb4d0..ebf2e6887 100644 --- a/src/snmalloc/pal/pal_windows.h +++ b/src/snmalloc/pal/pal_windows.h @@ -103,7 +103,22 @@ namespace snmalloc static void initialise_for_singleton(size_t*) noexcept { - AddVectoredExceptionHandler(1, HandleReadonlyLazyCommit); + // Keep a handle for the exception handler, so we can remove it later + // when needed. + static PVOID g_Handler{}; + // Destructor for removing exception handler. + static OnDestruct tidy([]() { + if (g_Handler) + { + RemoveVectoredExceptionHandler(g_Handler); + g_Handler = NULL; // Prevent dangling pointer + } + }); + // Add exception handler for lazy commit. + if (!g_Handler) + { + g_Handler = AddVectoredExceptionHandler(1, HandleReadonlyLazyCommit); + } } // Ensure the exception handler is registered.