Skip to content

UI freezes/deadlocks while debugging apps with many short-lived threads: Debug tree refresh (TreeModelContentProvider.updateNodes) collides with hover #4403

Open

Description

@lyh061619

Environment: Eclipse 2026-09 (4.41.0.20260903-0719), Windows Server 2025,
JDK 27; debuggee is Spring Boot 4.1 with virtual threads (enabled by
default), sustained thread churn (scheduled tasks suffice — no external
traffic required).

Symptom: repeated UI freezes (2-30s+, cyclic, CPU only 1-3% during freeze).
Captured deadlock pair in .metadata/.log (2026-09-17/18):

main: TreeModelContentProvider.updateNodes (recursive x3)
-> TreeViewer.replace/setChildCount -> OS.SendMessage (SWT tree surgery)
'Text Viewer Hover Presenter': Display.syncExec() cancelled waiting for the
UI lock

Still reproducible on 4.41 as of 2026-09-24 (monitoring sample attached).

Triggered by thread start/death events while a debug session is active,
even when the user is not interacting.

Workarounds (verified): uncheck Show Running Threads / Thread Groups /
Virtual Threads / Monitors in the Debug view menu, or close the Debug view,
or run without the debugger.

Related:

Note: this issue is against the Debug view implementation
(org.eclipse.debug.ui, TreeModelContentProvider); the jdt.debug tickets
above are referenced as the same-family history in the debugger area.

Attached: raw monitoring samples (deadlock pair 2026-09-17, recurrence
2026-09-24).

Activity

  1. fedejeanne commented on Oct 1, 2026

    @fedejeanne
    Member

    Hello @lyh061619 , can you please give more details provide samples and/or stack-traces showing the freezes? Is the issue in platform or in Spring? Also, I don't see the relation to #296, maybe your agent meant another repo?

  2. lyh061619 commented on Oct 2, 2026

    @lyh061619
    Author

    Hello @lyh061619 , can you please give more details provide samples and/or stack-traces showing the freezes? Is the issue in platform or in Spring? Also, I don't see the relation to #296, maybe your agent meant another repo?

    Thanks for the triage — answers below; fresh monitoring samples are being
    re-captured and will be attached within a day (the freeze reproduces
    several times per debugging hour, so capturing is just a matter of letting
    a debug session run).

    1. Samples: coming — two fresh captures on their way (the deadlock pair
      main-in-TreeModelContentProvider / hover-cancelled-at-syncExec, plus a
      standalone recurrence). The 2026-09-18 pair and the 2026-09-24
      recurrence from my original report have the same shape; quoting their
      key frames here for reference:

      main:
      TreeModelContentProvider.handleAdd -> updateNodes (x3)
      -> TreeViewer.setChildCount -> OS.SendMessage (SWT tree surgery)
      'Text Viewer Hover Presenter':
      Display.syncExec() cancelled waiting for the UI lock
      (SelectedResourceManager.getFromUI <- JavaDebugHover)

    2. Platform or Spring? Platform. The frames are
      org.eclipse.debug.ui.viewers (TreeModelContentProvider),
      org.eclipse.jface.viewers (TreeViewer) and SWT (OS.SendMessage) — no
      Spring/STS frames. The debuggee is Spring Boot 4.1 with virtual
      threads on by default, which supplies the thread start/death churn;
      any app with many short-lived threads should reproduce. I can attach a
      ~20-line reproducer (scheduled thread spawner) if useful.

    3. Split packages reported in platform ui #296: yes — Virtual threads presentation in Debug View eclipse-jdt/eclipse.jdt.debug#296, same feature area
      (Debug view × virtual threads): that one is about virtual-thread
      presentation, this one is thread events flooding the Debug tree
      refresh on the UI thread. Related, not duplicate.

    Environment: 4.41.0.20260903-0719, Windows Server 2025, JDK 27 (IDE and
    debuggee), ~20 Maven projects.

    Workaround in daily use (verified): uncheck Show Running Threads / Thread
    Groups / Virtual Threads / Monitors in the Debug view menu, or close the
    Debug view while the app runs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions