fix altsigstack never being used

allocate a larger altsigstack
handle failed altsigstack alloc better
This commit is contained in:
Glenn Maynard
2004-02-15 22:29:51 +00:00
parent d32745bd94
commit a314298d68
+10 -5
View File
@@ -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. */