Skip to content

Clean up breakpoints after marker loss - #990

Open
carstenartur wants to merge 1 commit into
eclipse-jdt:masterfrom
carstenartur:fix-null-marker-deregister-request
Open

carstenartur wants to merge 1 commit into
eclipse-jdt:masterfrom
carstenartur:fix-null-marker-deregister-request

Conversation

@carstenartur

@carstenartur carstenartur commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

What this fixes

A Java breakpoint can lose its workspace marker after it has been installed in a debug target. When the removal callback arrives, the target already knows which breakpoint it installed. Consulting marker-backed state again during removal can prevent cleanup and leave the breakpoint associated with the target or thread.

A second failure path occurs when deregistering one of several JDI requests throws a CoreException. The remaining requests, filters, and installed-target state still need to be cleaned up. Otherwise, reinstalling the same breakpoint object can suppress its next installation notification.

This addresses the marker-loss removal paths reported in #55. The issue also tracks other stale-breakpoint scenarios.

Implementation

  • Find and remove previously tracked breakpoints by object identity. Preserve the existing synchronization of the target's breakpoint list.
  • Use markerExists() before updating installation counts for regular and class-prepare breakpoints.
  • If request deregistration throws a CoreException, attempt the remaining requests and clear the request collection. Preserve the first exception and attach subsequent failures as suppressed exceptions.
  • Complete thread-filter and instance-filter cleanup, including adjacent matching instance filters. Clear installed-target state and attempt the removal notification even if an earlier cleanup step or change notification failed.
  • Record markerless removals by identity in GlobalBreakpointListener so the tests can verify which breakpoint was removed.

Review scope

This PR contains one breakpoint commit across seven files. The JDI test-harness changes were merged separately in #992.

The rebase onto efe9d966 preserves the original breakpoint patch, including all five regression tests. The stable Git patch IDs before and after the rebase are identical.

Regression tests

BreakpointRemovalTests is registered in org.eclipse.jdt.debug.tests.AutomatedSuite. Its five cases exercise removal against a real debug target and VM.

  • Deleted marker. Suspend HitCountLooper at a line breakpoint, delete its workspace marker, and verify removal notification and target/thread cleanup. A replacement breakpoint at the same location must be hit. This case also passed on the previous production code and protects existing behavior.
  • Detached markers. Two tests detach the marker association from an installed line breakpoint and an installed class-prepare breakpoint. Both verify removal from tracked state, recording by the global listener, and absence of unexpected error-log entries.
  • Request deregistration failures. Install multiple real JDI requests, a thread filter, and two instance filters. Inject two exceptions after actual deregistration. Verify request deletion in the VM, cleanup on both sides of the association, removal notification, and preservation of the original exception. Repeated removal must be harmless. Reinstalling the same breakpoint object must produce a fresh installation notification, and resuming the VM must hit that object again.
  • Additional change-notification failure. Also make fireChanged() throw during removal. Verify that cleanup and removal notification still complete, that the change-notification failure is suppressed on the original exception, and that the same breakpoint can be installed and hit again.

Verification

Author checklist

Assisted-by: OpenAI ChatGPT

@eclipse-jdt-bot

eclipse-jdt-bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

This pull request changes some projects for the first time in this development cycle.
Therefore the following files need a version increment:

org.eclipse.jdt.debug/META-INF/MANIFEST.MF

An additional commit containing all the necessary changes was pushed to the top of this PR's branch. To obtain these changes (for example if you want to push more changes) either fetch from your fork or apply the git patch.

Git patch
From fc092eb880dae4daa13aadacb0c32855ac12609f Mon Sep 17 00:00:00 2001
From: Eclipse JDT Bot <jdt-bot@eclipse.org>
Date: Fri, 4 Sep 2026 09:46:02 +0000
Subject: [PATCH] Version bump(s) for 4.42 stream


diff --git a/org.eclipse.jdt.debug/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
index 5ef560aea..22153c4b5 100644
--- a/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug; singleton:=true
-Bundle-Version: 3.26.100.qualifier
+Bundle-Version: 3.26.200.qualifier
 Bundle-ClassPath: jdimodel.jar
 Bundle-Activator: org.eclipse.jdt.internal.debug.core.JDIDebugPlugin
 Bundle-Vendor: %providerName
-- 
2.55.0

Further information are available in Common Build Issues - Missing version increments.

@github-actions
github-actions Bot force-pushed the fix-null-marker-deregister-request branch from f1bee33 to e5ec99a Compare September 4, 2026 09:38
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch 10 times, most recently from 2030bcd to 17bf4ae Compare September 4, 2026 18:58
@carstenartur carstenartur changed the title Avoid NPE when deregistering breakpoints without markers Clean up breakpoints after marker loss Sep 5, 2026
carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Sep 5, 2026
Clean up VM/proxy processes and readers when launch, attach or program
startup fails, including the path used directly by VirtualMachineTest.
Make shutdown safe before the event reader exists and preserve the
startup failure when cleanup also fails.

Wait for owned processes after normal and forced termination using
bounded waits, retain interruption, and attempt proxy cleanup even if
VM termination fails. Reset test state and select the next automatic
port after failed startup, preserving custom VM command ports.

Add 15 regression tests to the JDI AutomatedSuite, including injected
lifecycle failures, process termination test doubles and a real Java
subprocess. Leave the connection timeout and PR eclipse-jdt#990 unchanged.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Sep 5, 2026
Integrate df207ce as a separately
reviewable prerequisite of the breakpoint-removal change in PR eclipse-jdt#990.
The infrastructure commit passed upstream Jenkins PR-992 build 2,
including 1474 tests and the overall build. Its JDI test bundle is
copied byte-for-byte; the original seven breakpoint-change files
are unchanged. Both changes share upstream base af15c26.

This does not assert that the original connection-refused failures
had the silent-peer cause. The combined change now needs its own
upstream CI run. Merge eclipse-jdt#992 first; its commits remain distinguishable
from the feature change, rather than being squashed into it.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@carstenartur
carstenartur marked this pull request as ready for review September 5, 2026 20:37
Copilot AI lite review requested due to automatic review settings September 5, 2026 20:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The PR description’s stated scope (marker-loss breakpoint cleanup) doesn’t cover the additional VM startup/timeout test-harness changes, and that scope needs clarification (update description or split) before approval.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR hardens breakpoint removal/cleanup in org.eclipse.jdt.debug against cases where a breakpoint’s backing marker has been deleted/detached, ensuring target/thread state is cleaned up even when marker-dependent operations fail. It also adds new regression tests around marker-loss removal and introduces additional JDI test-harness cleanup/timeout coverage for failed VM startup paths.

Changes:

  • Make breakpoint removal cleanup rely on identity and installed-state tracking rather than marker-backed equality/support checks, and ensure target/thread references are cleared in finally.
  • Guard install-count updates against missing markers via markerExists() in breakpoint request deregistration.
  • Add new plug-in and JDI tests covering marker-loss breakpoint cleanup and failed/timeout VM startup cleanup behavior.
File summaries
File Description
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java Remove current breakpoints by object identity to avoid marker-dependent equality.
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java Determine “installed” via tracked breakpoints and ensure thread/target cleanup in finally.
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaClassPrepareBreakpoint.java Use markerExists() when updating install count during request deregistration.
org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/breakpoints/JavaBreakpoint.java Use markerExists() when updating install count during request deregistration.
org.eclipse.jdt.debug/META-INF/MANIFEST.MF Bump bundle version.
org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/BreakpointRemovalTests.java New plug-in tests for breakpoint cleanup after marker deletion/detachment.
org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java Add BreakpointRemovalTests to the automated suite.
org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/VMStartupCleanupTest.java New tests for cleanup behavior on failed VM startup paths.
org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/VMConnectionTimeoutTest.java New tests ensuring attach/handshake timeouts are bounded and cleanup runs.
org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestProcessCleanup.java New helper for bounded process termination in JDI tests.
org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AutomatedSuite.java Add new VM startup/timeout tests to the JDI automated suite.
org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java Add exception-safe startup cleanup, bounded attach timeouts, and bounded process termination.
Review details
  • Files reviewed: 12/12 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Sep 7, 2026
Clean up VM/proxy processes and readers when launch, attach or program
startup fails, including the path used directly by VirtualMachineTest.
Make shutdown safe before the event reader exists and preserve the
startup failure when cleanup also fails.

Wait for owned processes after normal and forced termination using
bounded waits, retain interruption, and attempt proxy cleanup even if
VM termination fails. Reset test state and select the next automatic
port after failed startup, preserving custom VM command ports.

Add 15 regression tests to the JDI AutomatedSuite, including injected
lifecycle failures, process termination test doubles and a real Java
subprocess. Leave the connection timeout and PR eclipse-jdt#990 unchanged.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from b336664 to 0df5c2c Compare September 7, 2026 12:33
carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Sep 11, 2026
Keep the JDI test-infrastructure changes needed by this branch as one separately reviewable dependency snapshot. The shared harness cleans up VM/proxy processes and readers when launch, attach or program startup fails, uses bounded process termination, and bounds individual JDI attach attempts so startup cleanup remains reachable if a JDWP peer stalls during the handshake.

These changes belong to eclipse-jdt#992 and are not part of the breakpoint-removal fix. After eclipse-jdt#992 is merged, eclipse-jdt#990 should be rebased onto the resulting upstream state so this dependency commit disappears from the final breakpoint-specific history.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from 0df5c2c to 98eb02e Compare September 11, 2026 06:35
@carstenartur

Copy link
Copy Markdown
Contributor Author

Hi @SarikaSinha and @SougandhS,

Could one of you review this PR and the separate JDI test-harness prerequisite #992, or suggest another committer familiar with this area?

I previously summarized the marker-loss cleanup scenarios and regression coverage in #55. The proposed integration order is to review and merge #992 first, then rebase this PR so that its remaining diff contains only the breakpoint-specific changes and tests.

I appreciate that review capacity is limited. It would help to know whether this approach is suitable for JDT Debug, whether you would prefer a different split, or whether anything else is needed from my side before a review.

The intention remains to address the covered cleanup scenarios, not to claim that every scenario under umbrella issue #55 is resolved.

Thank you!

@SougandhS

Copy link
Copy Markdown
Member

Will check 👍

carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Sep 29, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so that a stalled JDWP handshake cannot prevent startup cleanup. Retain
connection failures and process diagnostics before cleanup changes state.

Add regression coverage for startup failures, process termination,
repeated shutdown, unavailable process IDs and stalled JDWP handshakes.

Keep these changes confined to the JDI test harness. The breakpoint
cleanup implementation is reviewed separately in eclipse-jdt#990.
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from 98eb02e to 9e74405 Compare September 29, 2026 06:42
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from 9e74405 to 9ea93a8 Compare September 29, 2026 14:40
iloveeclipse pushed a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Oct 7, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so that a stalled JDWP handshake cannot prevent startup cleanup. Retain
connection failures and process diagnostics before cleanup changes state.

Add regression coverage for startup failures, process termination,
repeated shutdown, unavailable process IDs and stalled JDWP handshakes.

Keep these changes confined to the JDI test harness. The breakpoint
cleanup implementation is reviewed separately in eclipse-jdt#990.
@iloveeclipse
iloveeclipse force-pushed the fix-null-marker-deregister-request branch from 9ea93a8 to 965becc Compare October 7, 2026 14:55
@iloveeclipse

Copy link
Copy Markdown
Member

I've just rebased on latest master

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The separate #992 JDI infrastructure commit remains included despite the stated breakpoint-only scope.

1 open finding
1 resolved since last review

🧠 Review effort: Balanced

Comment on lines +35 to +36
addTest(new TestSuite(VMConnectionTimeoutTest.class));
addTest(new TestSuite(VMStartupCleanupTest.class));
carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Oct 9, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so that a stalled JDWP handshake cannot prevent startup cleanup. Retain
connection failures and process diagnostics before cleanup changes state.

Add regression coverage for startup failures, process termination,
repeated shutdown, unavailable process IDs and stalled JDWP handshakes.
Mark intentionally unused invocation-handler parameters explicitly.

Keep these changes confined to the JDI test harness. They are reviewed
separately in eclipse-jdt#992 and are not a prerequisite
for the breakpoint regression tests in eclipse-jdt#990.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from 965becc to f971f9c Compare October 9, 2026 06:29
carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Oct 9, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so that a stalled JDWP handshake cannot prevent startup cleanup. Retain
connection failures and process diagnostics before cleanup changes state.

Add regression coverage for startup failures, process termination,
repeated shutdown, unavailable process IDs and stalled JDWP handshakes.
Mark intentionally unused invocation-handler parameters explicitly.

Keep these changes confined to the JDI test harness. The breakpoint
cleanup implementation is reviewed separately in eclipse-jdt#990.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@carstenartur

Copy link
Copy Markdown
Contributor Author

Thanks @iloveeclipse for the rebase. I have pushed the code/test follow-up as f971f9c17c98ab0b12e71097e146f0b21e33586e.

The two commits are intentional: one carries the JDI test-harness change reviewed separately in #992, and one contains the breakpoint fix. The infrastructure commit was restored while investigating whether separating it explained the earlier CI regression. The description was not brought back in sync, which caused understandable confusion. The focused runs do not build or load the JDI test plugin, so I no longer describe #992 as a prerequisite for the breakpoint fix. This update preserves the same upstream base and the two separately squashed changes.

Build 31 had reported 1,489 passed tests, but four new unused-lambda-parameter warnings made the compiler gate unstable. Those four warning sites are now fixed. This was a different reported failure from the earlier test-process exit code 143.

The additional QA found two substantive gaps: the test helper used marker-dependent hashing when recording markerless removals, and a deregistration exception could stop cleanup while other real JDI requests remained installed. The helper now records removals by identity. Request cleanup continues after a CoreException and reports the original failure afterwards, retaining further exceptions as suppressed.

All three original cases are retained and now check unexpected error-log entries. A fourth test checks the exception path against a real VM and real requests, including a working replacement breakpoint. The test-first run reproduced the listener errors and a surviving class-prepare request. The corrected implementation passes all 37 focused tests, including the existing listener tests. Restoring only the upstream target implementation makes the new test fail at Target reference survived failed removal, independently verifying the target's exception-safe cleanup.

Breakpoint-only diff

The matching unused-parameter correction has also been applied to the standalone #992 without changing its base. No tests, warning gates or product build timeouts have been removed or relaxed.

Jenkins build 32 and full-history Maven verification were still running when this implementation update was prepared. A preceding shallow-checkout diagnostic attempt stopped at the unchanged macOS plugin's baseline comparison before executing tests; it is not counted as a successful full run. The focused results are not being presented as a completed green overall build.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The deregistration exception path leaves breakpoint-owned target and filter state uncleared.

2 open findings

🧠 Review effort: Balanced

@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from f971f9c to cc798f3 Compare October 9, 2026 08:57
carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Oct 9, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so that a stalled JDWP handshake cannot prevent startup cleanup. Retain
connection failures and process diagnostics before cleanup changes state.

Add regression coverage for startup failures, process termination,
repeated shutdown, unavailable process IDs and stalled JDWP handshakes.
Use named invocation-handler parameters for the existing Java 21 source
level; unnamed lambda parameters must not require preview features.

TEMPORARY CI DIAGNOSTICS: Jenkins build 9 passed all 276 JDI tests, but
the separate UI test runtime exited with code 143 after about 20 minutes.
Preserve the complete Maven output and repeat the UI output and Eclipse
error log at the end of a failed build so the GitHub check includes the
relevant evidence instead of only the subsequent successful JDI output.
Preserve Maven's exit status, arguments, timeouts and quality gates.
Remove the diagnostic Jenkinsfile change before merging.

The breakpoint cleanup implementation is reviewed separately in
eclipse-jdt#990.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@iloveeclipse
iloveeclipse requested a balanced review from Copilot October 12, 2026 05:36

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The cleanup paths are exception-safe, comprehensively tested, and the referenced full verification completed successfully.

1 open finding
1 resolved since last review

🧠 Review effort: Balanced

carstenartur added a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Oct 20, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so a stalled JDWP handshake cannot prevent startup cleanup. Retain the
connection failure and process diagnostics before cleanup changes state.

Follow review by keeping the existing JDI suite unchanged, omitting the
added infrastructure tests and temporary Jenkins diagnostics, and removing
the configurable process timeout entry point used only by those tests.
Explain why the forced-exit wait keeps its deadline across interruptions.

The breakpoint cleanup implementation is reviewed separately in
eclipse-jdt#990.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
Assisted-by: OpenAI ChatGPT
trancexpress pushed a commit to carstenartur/eclipse.jdt.debug that referenced this pull request Oct 20, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so a stalled JDWP handshake cannot prevent startup cleanup. Retain the
connection failure and process diagnostics before cleanup changes state.

Follow review by keeping the existing JDI suite unchanged, omitting the
added infrastructure tests and temporary Jenkins diagnostics, and removing
the configurable process timeout entry point used only by those tests.
Explain why the forced-exit wait keeps its deadline across interruptions.

The breakpoint cleanup implementation is reviewed separately in
eclipse-jdt#990.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
Assisted-by: OpenAI ChatGPT
trancexpress pushed a commit that referenced this pull request Oct 21, 2026
Clean up owned VM and proxy processes when launch, attach or program
startup fails, including when failed JUnit setup bypasses teardown.
Preserve the original failure and interruption state, tolerate missing
readers, and bound normal and forced process termination.

Bound individual JDI attach attempts by the remaining connection budget
so a stalled JDWP handshake cannot prevent startup cleanup. Retain the
connection failure and process diagnostics before cleanup changes state.

Follow review by keeping the existing JDI suite unchanged, omitting the
added infrastructure tests and temporary Jenkins diagnostics, and removing
the configurable process timeout entry point used only by those tests.
Explain why the forced-exit wait keeps its deadline across interruptions.

The breakpoint cleanup implementation is reviewed separately in
#990.

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
Assisted-by: OpenAI ChatGPT
Remove tracked breakpoints by identity after their marker is deleted or
detached. Guard installation-count updates with markerExists() and clear
target and current-thread references even when request cleanup fails.

Continue removing remaining JDI requests after a deregistration
CoreException. Complete breakpoint-side filter and installation cleanup
before reporting the first failure, preserving later cleanup errors as
suppressed exceptions. Clear installed-target state independently of
plugin notification and remove all matching instance filters.

Retain the marker-deletion and detached-marker regression tests. Record
removals by identity in the global test listener and reject unexpected
error-log entries. Real-VM failure-path tests verify request deletion,
state on both sides, removal and installation notifications, repeated
removal, and reinstalling and hitting the very same breakpoint. Also
verify that a change-notification failure cannot mask the original
request-deregistration failure or skip the removal notification.

Addresses eclipse-jdt#55

Signed-off-by: Carsten Hammer <carsten.hammer@t-online.de>
@carstenartur
carstenartur force-pushed the fix-null-marker-deregister-request branch from cc798f3 to 8bf2de8 Compare November 13, 2026 04:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants