New submission from Matt Frank: When the faulthandler module is compiled at -O3 (the default for non-debug builds) with a compiler that does tailcall optimization the Modules/faulthandler.c:stack_overflow() function may become an infinite loop that does not expand the stack. This puts the interpreter into an infinite loop with 100% CPU utilization that won't respond to SIGINT. (But sending SIGTERM will get it to exit.)
The Intel compiler (15.0.1 on Linux) seems to be able to prove this optimization "safe". (And thus cause the function to turn into an infinite loop.) While gcc 4.8.2 and clang 3.4.2 do not currently optimize this call (because their pointer analysis isn't quite strong enough to deal with the pointer to the depth argument), there's no guarantee that they won't be able to optimize it in their next versions. This patch adds a test between the recursive call and the return statement which makes it not a tail call. ---------- components: Extension Modules files: faulthandler-infloop.patch keywords: patch messages: 237993 nosy: WanderingLogic priority: normal severity: normal status: open title: infinite loop in faulthandler._stack_overflow type: behavior versions: Python 3.4, Python 3.5, Python 3.6 Added file: http://bugs.python.org/file38463/faulthandler-infloop.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue23654> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com