mirror of
https://github.com/python/cpython.git
synced 2024-11-23 18:04:37 +08:00
Closes #22869: Move PyOS_CheckStack back to pythonrun.c
This commit is contained in:
parent
9b59dd4781
commit
c4821d62b4
@ -1431,44 +1431,6 @@ Py_FdIsInteractive(FILE *fp, const char *filename)
|
||||
}
|
||||
|
||||
|
||||
#if defined(USE_STACKCHECK)
|
||||
#if defined(WIN32) && defined(_MSC_VER)
|
||||
|
||||
/* Stack checking for Microsoft C */
|
||||
|
||||
#include <malloc.h>
|
||||
#include <excpt.h>
|
||||
|
||||
/*
|
||||
* Return non-zero when we run out of memory on the stack; zero otherwise.
|
||||
*/
|
||||
int
|
||||
PyOS_CheckStack(void)
|
||||
{
|
||||
__try {
|
||||
/* alloca throws a stack overflow exception if there's
|
||||
not enough space left on the stack */
|
||||
alloca(PYOS_STACK_MARGIN * sizeof(void*));
|
||||
return 0;
|
||||
} __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
|
||||
EXCEPTION_EXECUTE_HANDLER :
|
||||
EXCEPTION_CONTINUE_SEARCH) {
|
||||
int errcode = _resetstkoflw();
|
||||
if (errcode == 0)
|
||||
{
|
||||
Py_FatalError("Could not reset the stack!");
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* WIN32 && _MSC_VER */
|
||||
|
||||
/* Alternate implementations can be added here... */
|
||||
|
||||
#endif /* USE_STACKCHECK */
|
||||
|
||||
|
||||
/* Wrappers around sigaction() or signal(). */
|
||||
|
||||
PyOS_sighandler_t
|
||||
|
@ -1376,6 +1376,43 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
#if defined(USE_STACKCHECK)
|
||||
#if defined(WIN32) && defined(_MSC_VER)
|
||||
|
||||
/* Stack checking for Microsoft C */
|
||||
|
||||
#include <malloc.h>
|
||||
#include <excpt.h>
|
||||
|
||||
/*
|
||||
* Return non-zero when we run out of memory on the stack; zero otherwise.
|
||||
*/
|
||||
int
|
||||
PyOS_CheckStack(void)
|
||||
{
|
||||
__try {
|
||||
/* alloca throws a stack overflow exception if there's
|
||||
not enough space left on the stack */
|
||||
alloca(PYOS_STACK_MARGIN * sizeof(void*));
|
||||
return 0;
|
||||
} __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
|
||||
EXCEPTION_EXECUTE_HANDLER :
|
||||
EXCEPTION_CONTINUE_SEARCH) {
|
||||
int errcode = _resetstkoflw();
|
||||
if (errcode == 0)
|
||||
{
|
||||
Py_FatalError("Could not reset the stack!");
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* WIN32 && _MSC_VER */
|
||||
|
||||
/* Alternate implementations can be added here... */
|
||||
|
||||
#endif /* USE_STACKCHECK */
|
||||
|
||||
/* Deprecated C API functions still provided for binary compatiblity */
|
||||
|
||||
#undef PyParser_SimpleParseFile
|
||||
|
Loading…
Reference in New Issue
Block a user