do_race(set_value, mutate)
+ def test_racing_recursion_limit(self):
+ def something_recursive():
+ def count(n):
+ if n > 0:
+ return count(n - 1) + 1
+ return 0
+
+ count(50)
+
+ def set_recursion_limit():
+ for limit in range(100, 200):
+ sys.setrecursionlimit(limit)
+
+ do_race(something_recursive, set_recursion_limit)
+
if __name__ == "__main__":
unittest.main()
Py_SetRecursionLimit(int new_limit)
{
PyInterpreterState *interp = _PyInterpreterState_GET();
+ _PyEval_StopTheWorld(interp);
interp->ceval.recursion_limit = new_limit;
_Py_FOR_EACH_TSTATE_BEGIN(interp, p) {
int depth = p->py_recursion_limit - p->py_recursion_remaining;
p->py_recursion_remaining = new_limit - depth;
}
_Py_FOR_EACH_TSTATE_END(interp);
+ _PyEval_StartTheWorld(interp);
}
/* The function _Py_EnterRecursiveCallTstate() only calls _Py_CheckRecursiveCall()