Preserve a pointer to the newly allocated signal stack as well. That too

is flagged by LSan at least among leak detectors.

llvm-svn: 279605
This commit is contained in:
Chandler Carruth 2016-08-24 03:42:51 +00:00
parent 3a133159cc
commit eb232dc90d
1 changed files with 6 additions and 4 deletions

View File

@ -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<char *>(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);