summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2024-09-22 19:51:09 (GMT)
committerGitHub <noreply@github.com>2024-09-22 19:51:09 (GMT)
commitd5f95ec07bb47a4d6554e04d13a979dbeac05f74 (patch)
tree217b678fead637fb73e14729d54eb1f13b1f6079 /Lib/idlelib
parent342e654b8eda24c68da64cc21bc9583e480d9e8e (diff)
downloadcpython-d5f95ec07bb47a4d6554e04d13a979dbeac05f74.zip
cpython-d5f95ec07bb47a4d6554e04d13a979dbeac05f74.tar.gz
cpython-d5f95ec07bb47a4d6554e04d13a979dbeac05f74.tar.bz2
gh-112938: IDLE - Fix uninteruptable hang when Shell gets rapid continuous output. (#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.
Diffstat (limited to 'Lib/idlelib')
-rw-r--r--Lib/idlelib/idle_test/test_outwin.py5
-rw-r--r--Lib/idlelib/outwin.py2
2 files changed, 6 insertions, 1 deletions
diff --git a/Lib/idlelib/idle_test/test_outwin.py b/Lib/idlelib/idle_test/test_outwin.py
index d6e85ad..81f4aad 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 @@ class OutputWindowTest(unittest.TestCase):
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 5ed3f35..8baa657 100644
--- a/Lib/idlelib/outwin.py
+++ b/Lib/idlelib/outwin.py
@@ -112,7 +112,7 @@ class OutputWindow(EditorWindow):
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):