| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
When a Tcl command running its own event loop (such as vwait or wait_variable) was active and the user typed input on stdin, the event loop kept spinning at 100% CPU. The stdin file handler is now removed as soon as input becomes available. Also fix pythongh-139816: an exception raised in a callback no longer stops the event loop to wait for Enter on a Python built without readline; pending callbacks keep running until input is actually available on stdin. Co-authored-by: mdehoon <mjldehoon@yahoo.com> Co-authored-by: Christopher Chavez <chrischavez@gmx.us> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
@serhiy-storchaka Looks good to me, thanks! |
Sorry, something went wrong.
|
Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14, 3.15. |
Sorry, something went wrong.
|
GH-152291 is a backport of this pull request to the 3.15 branch. |
Sorry, something went wrong.
|
GH-152292 is a backport of this pull request to the 3.14 branch. |
Sorry, something went wrong.
|
GH-152293 is a backport of this pull request to the 3.13 branch. |
Sorry, something went wrong.
…) (GH-152291) When a Tcl command running its own event loop (such as vwait or wait_variable) was active and the user typed input on stdin, the event loop kept spinning at 100% CPU. The stdin file handler is now removed as soon as input becomes available. Also fix gh-139816: an exception raised in a callback no longer stops the event loop to wait for Enter on a Python built without readline; pending callbacks keep running until input is actually available on stdin. (cherry picked from commit 3ffda34) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: mdehoon <mjldehoon@yahoo.com> Co-authored-by: Christopher Chavez <chrischavez@gmx.us> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…) (GH-152292) When a Tcl command running its own event loop (such as vwait or wait_variable) was active and the user typed input on stdin, the event loop kept spinning at 100% CPU. The stdin file handler is now removed as soon as input becomes available. Also fix gh-139816: an exception raised in a callback no longer stops the event loop to wait for Enter on a Python built without readline; pending callbacks keep running until input is actually available on stdin. (cherry picked from commit 3ffda34) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: mdehoon <mjldehoon@yahoo.com> Co-authored-by: Christopher Chavez <chrischavez@gmx.us> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…) (GH-152293) When a Tcl command running its own event loop (such as vwait or wait_variable) was active and the user typed input on stdin, the event loop kept spinning at 100% CPU. The stdin file handler is now removed as soon as input becomes available. Also fix gh-139816: an exception raised in a callback no longer stops the event loop to wait for Enter on a Python built without readline; pending callbacks keep running until input is actually available on stdin. (cherry picked from commit 3ffda34) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: mdehoon <mjldehoon@yahoo.com> Co-authored-by: Christopher Chavez <chrischavez@gmx.us> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
| Back | FazBrowse Home | New Git URL |
This fixes two related bugs in the interactive-mode input hook (EventHook in Modules/_tkinter.c), with minimal changes and without requiring a thread-enabled Tcl, so it remains backportable.
gh-139145: when a Tcl command running its own event loop (such as vwait or wait_variable) is active and input arrives on stdin, the loop kept spinning at 100% CPU. The stdin file handler is now removed as soon as input becomes available, in MyFileProc, so a nested loop no longer keeps waking on the same unread input.
gh-139816: an exception raised in a callback made EventHook return to the prompt, where (on a build without readline) it blocks in fgets until the user presses Enter, starving later callbacks. The exception is now reported inline and the loop keeps pumping until stdin actually has input.
The handler is deleted on every loop-exit path, and the descriptor is passed by value through clientData rather than as a pointer to a stack variable, so no stack address can outlive EventHook.
This builds on @mdehoon's #139180 (gh-139145) and a suggestion there from @chrstphrchvz; both are credited as co-authors. It supersedes #139180 by also covering gh-139816 and closing the result < 0 exit path.
No test is included: the spin and the without-readline hang both depend on the platform notifier and on timing/load, so a reliable, non-flaky regression test isn't practical across CI configurations.
Also fixes gh-139816.