gh-130396: Fix thread sanitizer crashes on stack overflow tests (gh-130966)
Thread sanitizer will often crash if a test uses more than half the stack.
This commit is contained in:
parent
1908115871
commit
4162bc133b
@ -392,7 +392,12 @@ _Py_InitializeRecursionLimits(PyThreadState *tstate)
|
|||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
uintptr_t base = ((uintptr_t)stack_addr) + guard_size;
|
uintptr_t base = ((uintptr_t)stack_addr) + guard_size;
|
||||||
_tstate->c_stack_top = base + stack_size;
|
_tstate->c_stack_top = base + stack_size;
|
||||||
|
#ifdef _Py_THREAD_SANITIZER
|
||||||
|
// Thread sanitizer crashes if we use a bit more than half the stack.
|
||||||
|
_tstate->c_stack_soft_limit = base + (stack_size / 2);
|
||||||
|
#else
|
||||||
_tstate->c_stack_soft_limit = base + PYOS_STACK_MARGIN_BYTES * 2;
|
_tstate->c_stack_soft_limit = base + PYOS_STACK_MARGIN_BYTES * 2;
|
||||||
|
#endif
|
||||||
_tstate->c_stack_hard_limit = base + PYOS_STACK_MARGIN_BYTES;
|
_tstate->c_stack_hard_limit = base + PYOS_STACK_MARGIN_BYTES;
|
||||||
assert(_tstate->c_stack_soft_limit < here_addr);
|
assert(_tstate->c_stack_soft_limit < here_addr);
|
||||||
assert(here_addr < _tstate->c_stack_top);
|
assert(here_addr < _tstate->c_stack_top);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user