diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java index 9619f0defce..5d13936f3bf 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/Edge.java @@ -551,7 +551,8 @@ private static void processOSMessagesUntil(Supplier condition, Consumer MSG msg = new MSG(); AtomicBoolean timeoutOccurred = new AtomicBoolean(); // The timer call also wakes up the display to avoid being stuck in display.sleep() - display.timerExec((int) MAXIMUM_OPERATION_TIME.toMillis(), () -> timeoutOccurred.set(true)); + Runnable runnable = () -> timeoutOccurred.set(true); + display.timerExec((int) MAXIMUM_OPERATION_TIME.toMillis(), runnable); while (!display.isDisposed() && !condition.get() && !timeoutOccurred.get()) { if (OS.PeekMessage(msg, 0, 0, 0, OS.PM_NOREMOVE | OS.PM_QS_POSTMESSAGE)) { display.readAndDispatch(); @@ -559,6 +560,7 @@ private static void processOSMessagesUntil(Supplier condition, Consumer display.sleep(); } } + display.timerExec(-1, runnable); if (!condition.get()) { timeoutHandler.accept(createTimeOutException()); } diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java index 5d9baff9aa5..200999c33cb 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_browser_Browser.java @@ -77,6 +77,7 @@ import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Shell; @@ -2754,6 +2755,18 @@ public void test_TabTraversalOutOfBrowser() { assertTrue(text.isFocusControl()); } +// Regression test for https://github.com/eclipse-platform/eclipse.platform.swt/issues/2806 +@Test +public void test_TimerRegression_Issue2806() { + for (int i = 0; i < 10000; i++) { + browser.setText("Iteration " + i); + new BrowserFunction(browser, "name"); + } + new Composite(shell, SWT.NONE); + processUiEvents(); + +} + /* custom */ /** * Wait for passTest to return true. Timeout otherwise.