fix altsigstack never being used
allocate a larger altsigstack handle failed altsigstack alloc better
This commit is contained in:
@@ -77,19 +77,24 @@ void SignalHandler::OnClose(handler h)
|
|||||||
int version;
|
int version;
|
||||||
GetKernel( system, version );
|
GetKernel( system, version );
|
||||||
void *p = NULL;
|
void *p = NULL;
|
||||||
if( version > 0x020500 )
|
const int AltStackSize = 1024*64;
|
||||||
p = mmap( NULL, SIGSTKSZ, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
|
if( version > 20500 )
|
||||||
|
p = mmap( NULL, AltStackSize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
|
||||||
|
|
||||||
if( p == (void *) -1 )
|
if( p == (void *) -1 )
|
||||||
p = malloc( SIGSTKSZ );
|
p = malloc( AltStackSize );
|
||||||
|
|
||||||
if( p != NULL )
|
if( p != NULL )
|
||||||
{
|
{
|
||||||
stack_t ss;
|
stack_t ss;
|
||||||
ss.ss_sp = p;
|
ss.ss_sp = p;
|
||||||
ss.ss_size = SIGSTKSZ;
|
ss.ss_size = AltStackSize;
|
||||||
ss.ss_flags = 0;
|
ss.ss_flags = 0;
|
||||||
sigaltstack( &ss, NULL );
|
if( sigaltstack( &ss, NULL ) == -1 )
|
||||||
|
{
|
||||||
|
LOG->Info( "sigaltstack failed: %s", strerror(errno) );
|
||||||
|
p = NULL; /* no SA_ONSTACK */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up our signal handlers. */
|
/* Set up our signal handlers. */
|
||||||
|
|||||||
Reference in New Issue
Block a user