https://github.com/python/cpython/commit/cf39a5f22cadd0078815e5beea944b350287417d
commit: cf39a5f22cadd0078815e5beea944b350287417d
branch: 3.12
author: Miss Islington (bot) <[email protected]>
committer: terryjreedy <[email protected]>
date: 2024-09-22T20:07:52Z
summary:

[3.12] gh-112938: IDLE - Fix uninteruptable hang when Shell gets rapid 
continuous output. (GH-124310) (#124319)

gh-112938: IDLE - Fix uninteruptable hang when Shell gets rapid continuous 
output. (GH-124310)

https://github.com/python/cpython/issues/88496 replaced text.update with 
text.update_idletasks in colorizer.py and outwin.py to fix test failures on 
macOS.  While theoretically correct, the result was Shell freezing when 
receiving continuous short strings to print.  Test: `while 1: 1`.

The guess is that there is no idle time in which to do the screen update.  
Reverting the change in one of the files,
outwin, fixes the issue.  Colorizer runs ever 1/20 second and seems to work 
fine.

When running test-outwin on macOS, alias 'update'
to 'update_idletasks on the text used for testing.
(cherry picked from commit d5f95ec07bb47a4d6554e04d13a979dbeac05f74)

Co-authored-by: Terry Jan Reedy <[email protected]>

files:
A Misc/NEWS.d/next/IDLE/2024-09-21-23-12-18.gh-issue-112938.OeiDru.rst
M Lib/idlelib/idle_test/test_outwin.py
M Lib/idlelib/outwin.py

diff --git a/Lib/idlelib/idle_test/test_outwin.py 
b/Lib/idlelib/idle_test/test_outwin.py
index d6e85ad674417c..81f4aad7e95e95 100644
--- a/Lib/idlelib/idle_test/test_outwin.py
+++ b/Lib/idlelib/idle_test/test_outwin.py
@@ -1,6 +1,7 @@
 "Test outwin, coverage 76%."
 
 from idlelib import outwin
+import sys
 import unittest
 from test.support import requires
 from tkinter import Tk, Text
@@ -18,6 +19,10 @@ def setUpClass(cls):
         root.withdraw()
         w = cls.window = outwin.OutputWindow(None, None, None, root)
         cls.text = w.text = Text(root)
+        if sys.platform == 'darwin':  # Issue 112938
+            cls.text.update = cls.text.update_idletasks
+            # Without this, test write, writelines, and goto... fail.
+            # The reasons and why macOS-specific are unclear.
 
     @classmethod
     def tearDownClass(cls):
diff --git a/Lib/idlelib/outwin.py b/Lib/idlelib/outwin.py
index 5ed3f35a7af655..8baa657550de94 100644
--- a/Lib/idlelib/outwin.py
+++ b/Lib/idlelib/outwin.py
@@ -112,7 +112,7 @@ def write(self, s, tags=(), mark="insert"):
         assert isinstance(s, str)
         self.text.insert(mark, s, tags)
         self.text.see(mark)
-        self.text.update_idletasks()
+        self.text.update()
         return len(s)
 
     def writelines(self, lines):
diff --git 
a/Misc/NEWS.d/next/IDLE/2024-09-21-23-12-18.gh-issue-112938.OeiDru.rst 
b/Misc/NEWS.d/next/IDLE/2024-09-21-23-12-18.gh-issue-112938.OeiDru.rst
new file mode 100644
index 00000000000000..0cd058eeffb1d5
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2024-09-21-23-12-18.gh-issue-112938.OeiDru.rst
@@ -0,0 +1 @@
+Fix uninteruptable hang when Shell gets rapid continuous output.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to