[Python-Dev] stack check on Unix: any suggestions? (original) (raw)

Jack Jansen jack@oratrix.nl
Wed, 30 Aug 2000 13:53:32 +0200


A completely different way to go about getting the stacksize on Unix is by actually committing the space once in a while. Something like (typed in as I'm making it up):

STACK_INCREMENT=128000

prober() { char space[STACK_INCREMENT];

space[0] = 1;
/* or maybe for(i=0;i<STACK_INCREMENT; i+=PAGESIZE) or so */
space[STACK_INCREMENT-1] = 1;

}

jmp_buf buf; catcher() { longjmp(buf); return 1; }

PyOS_CheckStack() { static char *known_safe; char *here;

if (we-are-in-a-thread())
go do different things;
if ( &here > known_safe )
return 1;
keep-old-SIGSEGV-handler;
if ( setjmp(buf) )
return 0;
signal(SIGSEGV, catcher);
prober();
restore-old-SIGSEGV-handler;
known_safe = &here - (STACK_INCREMENT - PYOS_STACK_MARGIN);
return 1;

}

Jack Jansen | ++++ stop the execution of Mumia Abu-Jamal ++++ Jack.Jansen@oratrix.com | ++++ if you agree copy these lines to your sig ++++ www.oratrix.nl/~jack | see http://www.xs4all.nl/~tank/spg-l/sigaction.htm