From: Chandler Carruth Date: Wed, 24 Aug 2016 03:42:51 +0000 (+0000) Subject: Preserve a pointer to the newly allocated signal stack as well. That too X-Git-Tag: android-x86-7.1-r4~28118 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=517a659c6650894ccea7392ec025b97b498fb988;p=android-x86%2Fexternal-llvm.git Preserve a pointer to the newly allocated signal stack as well. That too is flagged by LSan at least among leak detectors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279605 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/Unix/Signals.inc b/lib/Support/Unix/Signals.inc index 6a35656c8bb..961f32b4603 100644 --- a/lib/Support/Unix/Signals.inc +++ b/lib/Support/Unix/Signals.inc @@ -120,11 +120,12 @@ static void RegisterHandler(int Signal) { } #if defined(HAVE_SIGALTSTACK) -// Hold onto the old alternate signal stack so that it's not reported as a leak. -// We don't make any attempt to remove our alt signal stack if we remove our -// signal handlers; that can't be done reliably if someone else is also trying -// to do the same thing. +// Hold onto both the old and new alternate signal stack so that it's not +// reported as a leak. We don't make any attempt to remove our alt signal +// stack if we remove our signal handlers; that can't be done reliably if +// someone else is also trying to do the same thing. static stack_t OldAltStack; +static void* NewAltStackPointer; static void CreateSigAltStack() { const size_t AltStackSize = MINSIGSTKSZ + 64 * 1024; @@ -140,6 +141,7 @@ static void CreateSigAltStack() { stack_t AltStack = {}; AltStack.ss_sp = reinterpret_cast(malloc(AltStackSize)); + NewAltStackPointer = AltStack.ss_sp; // Save to avoid reporting a leak. AltStack.ss_size = AltStackSize; if (sigaltstack(&AltStack, &OldAltStack) != 0) free(AltStack.ss_sp);