Skip to content

devtools: Properly handle opening and closing client connections #42583

Merged
simonwuelker merged 2 commits intoservo:mainfrom
simonwuelker:devtools-dead-connections
Feb 13, 2026
Merged

devtools: Properly handle opening and closing client connections #42583
simonwuelker merged 2 commits intoservo:mainfrom
simonwuelker:devtools-dead-connections

Conversation

@simonwuelker
Copy link
Copy Markdown
Member

@simonwuelker simonwuelker commented Feb 12, 2026

Both the DevtoolsInstance and the BrowsingContextActor maintain a list of live connections. When a new global is created, its BrowsingContextActor copies the list of active connections from the DevtoolsInstance. When a client handler thread exits, the BrowsingContextActors remove the connection from their list of connections.

This has two implications:

  • BrowsingContextActors don't know about connections that are created after they were constructed, causing them to possibly incorrectly tell script that it doesn't need to send devtools updates anymore
  • the DevtoolsInstance never notices when connections are closed and panics when writing to them.

To fix this, I've removed the list of connections from the BrowsingContextActor and adjusted the logic to notify script when updates aren't needed anymore accordingly.

For some reason, our tests always open two connections and close the first one immediately, which is how I found this bug in the first place.

Part of #42454 - previously

/// A flag to indicate whether the developer tools has requested
/// live updates from the worker.
devtools_wants_updates: Cell<bool>,
was always false during our tests.

@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Feb 12, 2026
@simonwuelker simonwuelker changed the title devtools: Remove closed connections from DevtoolsInstance::connections devtools: Properly handle opening and closing client connections Feb 12, 2026
Comment thread components/shared/devtools/lib.rs Outdated
Comment thread components/devtools/lib.rs
@TimvdLippe
Copy link
Copy Markdown
Contributor

@eerii do you mind reviewing this one?

@simonwuelker simonwuelker force-pushed the devtools-dead-connections branch 2 times, most recently from dfebb10 to e8713f9 Compare February 12, 2026 21:29
Copy link
Copy Markdown
Member

@eerii eerii left a comment

Choose a reason for hiding this comment

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

This is great, thank you :) Keeping track of state in two places is a recipe for disaster, changes like this really help.

Comment thread components/devtools/lib.rs Outdated
// us noticing.
let mut connections = Vec::<TcpStream>::new();
for stream in self.connections.values() {
for stream in connections_map.values() {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does this work? That way we shouldn't need the explicit drop.

Suggested change
for stream in connections_map.values() {
for stream in self.connections.lock().unwrap().values() {

Alternatively we could use a scope surrounding the for loop.

Copy link
Copy Markdown
Member Author

@simonwuelker simonwuelker Feb 13, 2026

Choose a reason for hiding this comment

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

That does work! I was sure it wouldn't, since values_mut is referencing the short-lived mutex guard. Interesting.

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Feb 13, 2026
@simonwuelker simonwuelker force-pushed the devtools-dead-connections branch from e8713f9 to 04a7991 Compare February 13, 2026 12:31
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Feb 13, 2026
@simonwuelker simonwuelker force-pushed the devtools-dead-connections branch from 04a7991 to 9b20876 Compare February 13, 2026 12:32
Copy link
Copy Markdown
Contributor

@TimvdLippe TimvdLippe left a comment

Choose a reason for hiding this comment

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

Approving on behalf of Eerrii

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Feb 13, 2026
@TimvdLippe TimvdLippe added this pull request to the merge queue Feb 13, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 13, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Feb 13, 2026
@servo-highfive servo-highfive added S-tests-failed The changes caused existing tests to fail. and removed S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. labels Feb 13, 2026
@simonwuelker simonwuelker added the T-linux-wpt Do a try run of the WPT label Feb 13, 2026
@github-actions github-actions Bot removed the T-linux-wpt Do a try run of the WPT label Feb 13, 2026
@github-actions
Copy link
Copy Markdown

🔨 Triggering try run (#21988582683) for Linux (WPT)

@github-actions
Copy link
Copy Markdown

Test results for linux-wpt from try job (#21988582683):

Flaky unexpected result (72)
  • OK [expected ERROR] /IndexedDB/cursor-overloads.any.worker.html (#42324)
  • CRASH [expected ERROR] /IndexedDB/idbcursor-continue-exception-order.any.sharedworker.html
  • CRASH [expected ERROR] /IndexedDB/parallel-cursors-upgrade.any.sharedworker.html
  • OK /IndexedDB/transaction-deactivation-timing.any.worker.html (#38808)
    • PASS [expected FAIL] subtest: New transactions are deactivated before next task
    • PASS [expected FAIL] subtest: New transactions from microtask are deactivated before next task
  • CRASH [expected OK] /IndexedDB/value_recursive.any.html
  • OK /_mozilla/css/offset_properties_inline.html (#40543)
    • FAIL [expected PASS] subtest: offsetTop

      assert_equals: offsetTop of #inline-1 should be 0. expected 0 but got -1
      

    • FAIL [expected PASS] subtest: offsetLeft

      assert_equals: offsetLeft of #inline-2 should be 40. expected 40 but got 25
      

  • CRASH [expected OK] /_mozilla/mozilla/htmlimageelement.html
  • ERROR [expected OK] /_mozilla/mozilla/img_load_more_than_cache.html
  • CRASH [expected OK] /_mozilla/mozilla/node_insertBefore.html
  • TIMEOUT [expected PASS] /_mozilla/shadow-dom/move-element-with-ua-shadow-tree-crash.html (#39473)
  • CRASH [expected OK] /_webgl/conformance/ogles/GL/atan/atan_009_to_012.html
  • CRASH [expected OK] /_webgl/conformance/ogles/GL/build/build_057_to_064.html
  • CRASH [expected TIMEOUT] /_webgl/conformance/textures/misc/tex-video-using-tex-unit-non-zero.html (#39735)
  • CRASH [expected OK] /_webgl/conformance/textures/misc/texture-npot.html
  • OK /_webgl/conformance/textures/misc/texture-upload-size.html (#21770)
    • FAIL [expected PASS] subtest: WebGL test #45

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #47

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #49

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #51

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • PASS [expected FAIL] subtest: WebGL test #53
    • PASS [expected FAIL] subtest: WebGL test #55
    • PASS [expected FAIL] subtest: WebGL test #57
    • PASS [expected FAIL] subtest: WebGL test #59
    • FAIL [expected PASS] subtest: WebGL test #61

      assert_true: Texture was smaller than the expected size 2x2 expected true got false
      

    • FAIL [expected PASS] subtest: WebGL test #63

      assert_true: getError expected: INVALID_VALUE. Was NO_ERROR : when calling texSubImage2D with the same texture upload with offset 1, 1 expected true got false
      

    • And 18 more unexpected results...
  • CRASH [expected ERROR] /_webgl/conformance2/textures/image/tex-3d-rgb10_a2-rgba-unsigned_int_2_10_10_10_rev.html
  • CRASH [expected OK] /_webgl/conformance2/wasm/readpixels-4gb-wasm-memory.html
  • CRASH [expected ERROR] /compression/compression-stream.https.any.shadowrealm-in-serviceworker.html
  • CRASH [expected ERROR] /console/console-is-a-namespace.https.any.shadowrealm-in-audioworklet.html
  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • PASS [expected FAIL] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.
  • FAIL [expected PASS] /css/css-backgrounds/background-size-041.html
  • CRASH [expected OK] /css/css-flexbox/parsing/flex-basis-invalid.html
  • CRASH [expected OK] /css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html
  • CRASH [expected OK] /css/css-properties-values-api/animation/custom-property-animation-color-comma-list.html
  • CRASH [expected OK] /css/css-sizing/aspect-ratio/sign-function-aspect-ratio.html
  • CRASH [expected OK] /css/css-text/line-breaking/line-breaking-atomic-nowrap-001.html
  • CRASH [expected OK] /css/css-values/calc-size/calc-size-parsing.html
  • CRASH [expected OK] /encoding/legacy-mb-tchinese/big5/big5-decode-big5-hkscs.html?8001-9000
  • TIMEOUT /fetch/metadata/generated/css-images.https.sub.tentative.html (#42229)
    • FAIL [expected PASS] subtest: content sec-fetch-site - Cross-Site -&gt; Cross-Site

      assert_unreached: Reached unreachable code
      

  • ERROR [expected TIMEOUT] /html/browsers/browsing-the-web/history-traversal/pageswap/pageswap-initial-navigation.html (#40387)
  • TIMEOUT [expected ERROR] /html/browsers/browsing-the-web/history-traversal/pageswap/pageswap-push-from-click.html
  • OK /html/browsers/browsing-the-web/navigating-across-documents/005.html (#27062)
    • PASS [expected FAIL] subtest: Link with onclick navigation and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • PASS [expected FAIL] subtest: Cross-origin navigation started from unload handler must be ignored
  • TIMEOUT [expected OK] /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-requestsubmit.html
    • TIMEOUT [expected FAIL] subtest: Replace before load, triggered by formElement.requestSubmit()

      Test timed out
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/autofocus-dialog.html (#29087)
    • TIMEOUT [expected FAIL] subtest: &lt;dialog&gt;-contained autofocus element gets focused when the dialog is shown

      Test timed out
      

  • TIMEOUT [expected OK] /html/interaction/focus/the-autofocus-attribute/document-with-fragment-empty.html (#28259)
    • TIMEOUT [expected FAIL] subtest: Autofocus elements in top-level browsing context's documents with empty fragments should work.

      Test timed out
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html (#39703)
    • PASS [expected FAIL] subtest: Meta refresh of the original iframe is not blocked if moved into a sandboxed iframe
  • OK /html/semantics/embedded-content/media-elements/media_fragment_seek.html (#24114)
    • FAIL [expected PASS] subtest: Video should seek to time specified in media fragment syntax

      assert_equals: expected 3 but got 0
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/preserves-pitch.html (#40352)
    • PASS [expected TIMEOUT] subtest: Speed-ups should not change the pitch when preservesPitch=true
    • PASS [expected NOTRUN] subtest: Slow-downs should not change the pitch when preservesPitch=true
    • TIMEOUT [expected NOTRUN] subtest: Speed-ups should change the pitch when preservesPitch=false

      Test timed out
      

  • OK [expected TIMEOUT] /html/semantics/embedded-content/media-elements/src_object_blob.html (#40340)
    • PASS [expected TIMEOUT] subtest: HTMLMediaElement.srcObject blob
  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-nav-window-open.html (#32596)
  • OK /html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html (#36489)
    • PASS [expected FAIL] subtest: Verifies that form submissions scheduled inside javascript: urls take precedence over the javascript: url's return value.
  • OK /html/semantics/scripting-1/the-script-element/execution-timing/077.html (#22139)
    • FAIL [expected PASS] subtest: adding several types of scripts through the DOM and removing some of them confuses scheduler

      assert_array_equals: expected property 1 to be "Script #1 ran" but got "Script #3 ran" (expected array ["Script #2 ran", "Script #1 ran", "Script #3 ran", "Script #4 ran"] got ["Script #2 ran", "Script #3 ran", "Script #4 ran", "Script #1 ran"])
      

  • TIMEOUT [expected OK] /html/user-activation/navigation-state-reset-sameorigin.html
    • TIMEOUT [expected PASS] subtest: Post-navigation state reset.

      Test timed out
      

  • CRASH [expected OK] /html/webappapis/dynamic-markup-insertion/opening-the-input-stream/remove-initial-about-blankness.window.html (#28684)
  • CRASH [expected OK] /imagebitmap-renderingcontext/context-creation.html
  • OK /paint-timing/fcp-only/input-text.html (#42439)
    • FAIL [expected PASS] subtest: Text from a form control triggers First Contentful Paint.

      assert_equals: First contentful paint marked too early.  expected 0 but got 1
      

  • CRASH [expected TIMEOUT] /pointerevents/pointerevent_pointerout_pen.html
  • OK /preload/prefetch-document.html (#37210)
    • FAIL [expected PASS] subtest: different-site document prefetch with 'as=document' should not be consumed

      assert_equals: expected 2 but got 1
      

  • CRASH [expected OK] /referrer-policy/gen/iframe.meta/no-referrer/script-tag.http.html
  • OK /resource-timing/test_resource_timing.html (#25720)
    • PASS [expected FAIL] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (iframe)
  • CRASH [expected OK] /shadow-dom/focus-navigation/delegatesFocus-highlight-sibling.html
  • CRASH [expected OK] /shadow-dom/form-control-form-attribute.html
  • CRASH [expected ERROR] /streams/piping/general.any.shadowrealm-in-sharedworker.html
  • CRASH [expected ERROR] /streams/readable-byte-streams/enqueue-with-detached-buffer.any.sharedworker.html
  • CRASH [expected ERROR] /svg/painting/parsing/fill-valid.svg
  • CRASH [expected ERROR] /svg/painting/parsing/stroke-linecap-valid.svg
  • CRASH [expected OK] /svg/sniffing-content-type.html
  • CRASH [expected OK] /svg/types/scripted/SVGPathElement.getTotalLength-01.html
  • OK /touch-events/single-tap-when-touchend-listener-use-sync-xhr.html (#41175)
    • PASS [expected FAIL] subtest: Click event should be fired when touchend opens synchronous XHR
  • CRASH [expected OK] /uievents/mouse/mouse_boundary_events_modifier_no_mouse_movement.html?Control
  • OK /visual-viewport/resize-event-order.html (#41981)
    • PASS [expected FAIL] subtest: Popup: DOMWindow resize fired before VisualViewport.
  • CRASH [expected ERROR] /wasm/serialization/module/identity-not-preserved.html
  • CRASH [expected OK] /webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html
  • CRASH [expected OK] /webaudio/the-audio-api/the-audiobuffersourcenode-interface/buffer-resampling.html
  • CRASH [expected OK] /websockets/closing-handshake/004.html?default
  • CRASH [expected OK] /websockets/interfaces/WebSocket/send/004.html?wss
  • OK /webxr/xrSession_features_deviceSupport.https.html (#24357)
    • FAIL [expected PASS] subtest: Immersive XRSession requests with no supported device should reject

      assert_unreached: Should have rejected: undefined Reached unreachable code
      

  • CRASH [expected ERROR] /workers/interfaces/WorkerUtils/importScripts/report-error-setTimeout-redirect-to-cross-origin.sub.any.sharedworker.html
  • CRASH [expected OK] /xhr/preserve-ua-header-on-redirect.htm
  • CRASH [expected OK] /xhr/send-content-type-string.htm
  • CRASH [expected OK] /xhr/send-non-same-origin.htm
Stable unexpected results that are known to be intermittent (24)
  • ERROR [expected OK] /IndexedDB/cursor-overloads.any.html (#42437)
  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • TIMEOUT [expected OK] /_mozilla/mozilla/window_resize_event.html (#36741)
    • TIMEOUT [expected PASS] subtest: Popup onresize event fires after resizeTo

      Test timed out
      

  • OK /css/css-cascade/layer-font-face-override.html (#35935)
    • FAIL [expected PASS] subtest: @font-face override update with appended sheet 2

      assert_equals: expected "80px" but got "38.3166666666667px"
      

  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong)
    • FAIL [expected PASS] subtest: @font-face matching for quoted and unquoted generic(nastaliq)

      assert_equals: quoted generic(nastaliq) matches  @font-face rule expected 50 but got 30
      

  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted cursive (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted monospace (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted system-ui (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(nastaliq) (drawing text in a canvas)
  • ERROR [expected OK] /fetch/fetch-later/quota/same-origin-iframe/multiple-iframes.https.window.html (#35176)
  • OK /fetch/metadata/generated/css-font-face.sub.tentative.html (#34624)
    • PASS [expected FAIL] subtest: sec-fetch-storage-access - Not sent to non-trustworthy same-site destination
    • FAIL [expected PASS] subtest: sec-fetch-storage-access - Not sent to non-trustworthy cross-site destination

      promise_test: Unhandled rejection with value: object "Error: Failed to query for recorded headers."
      

  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • PASS [expected TIMEOUT] subtest: background-image sec-fetch-mode - Not sent to non-trustworthy same-site destination
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin-fragment.html (#20768)
    • PASS [expected FAIL] subtest: Tests that a fragment navigation in the unload handler will not block the initial navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • FAIL [expected PASS] subtest: aElement.click() before the load event must NOT replace

      assert_equals: history.length must change after waiting for the load expected 4 but got 3
      

  • OK /html/browsers/history/the-history-interface/traverse_the_history_4.html (#21383)
    • FAIL [expected PASS] subtest: Multiple history traversals, last would be aborted

      assert_array_equals: Pages opened during history navigation expected property 1 to be 5 but got 3 (expected array [6, 5] got [6, 3])
      

  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • FAIL [expected NOTRUN] subtest: Host element with delegatesFocus should support autofocus

      assert_equals: expected Element node &lt;div autofocus=""&gt;&lt;/div&gt; but got Element node &lt;body&gt;&lt;/body&gt;
      

    • FAIL [expected NOTRUN] subtest: Host element with delegatesFocus including no focusable descendants should be skipped

      assert_equals: expected Element node &lt;input autofocus=""&gt;&lt;/input&gt; but got Element node &lt;body&gt;&lt;div autofocus=""&gt;&lt;/div&gt;&lt;input autofocus=""&gt;&lt;/body&gt;
      

    • FAIL [expected NOTRUN] subtest: Area element should support autofocus

      promise_test: Unhandled rejection with value: object "TypeError: can't access property "appendChild", w.document.querySelector(...) is null"
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html (#39694)
    • FAIL [expected PASS] subtest: Meta refresh is blocked by the allow-scripts sandbox flag at its creation time, not when refresh comes due

      uncaught exception: Error: assert_unreached: The iframe from which the meta came from must not refresh Reached unreachable code
      

  • TIMEOUT /html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html (#41221)
    • TIMEOUT [expected FAIL] subtest: Feature-Policy header: autoplay "none" disallows same-origin iframes.

      Test timed out
      

  • CRASH [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-reload-location-reload.html (#32595)
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • PASS [expected FAIL] subtest: Reload domContentLoadedEventStart &gt; Original domContentLoadedEventStart
    • PASS [expected FAIL] subtest: Reload fetchStart &gt; Original fetchStart
  • OK /pointerevents/compat/pointerevent_touch-action_two-finger_interaction.html (#40418)
    • PASS [expected FAIL] subtest: touch two-finger pan on 'touch-action: pan-x pan-y'
  • OK [expected CRASH] /resource-timing/render-blocking-status-link.html (#41664)
  • OK /resource-timing/test_resource_timing.https.html (#25216)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (xmlhttprequest)

      assert_equals: expected 56.57000000000001 but got 56.56
      

  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls in report-only mode.
    • PASS [expected TIMEOUT] subtest: Navigate a frame via anchor with javascript:-urls w/ default policy in report-only mode.
    • FAIL [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in enforcing mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

    • FAIL [expected NOTRUN] subtest: Navigate a window via anchor with javascript:-urls w/ a default policy throwing an exception in report-only mode.

      promise_test: Unhandled rejection with value: "Unexpected message received: \"No securitypolicyviolation reported!\""
      

  • OK [expected TIMEOUT] /trusted-types/trusted-types-navigation.html?26-30 (#38807)
    • PASS [expected TIMEOUT] subtest: Navigate a window via form-submission with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ default policy in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls in enforcing mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in enforcing mode.
  • TIMEOUT [expected OK] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • TIMEOUT [expected PASS] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe

      Test timed out
      

  • OK [expected ERROR] /webxr/render_state_update.https.html (#27535)
Stable unexpected results (5)
  • CRASH [expected ERROR] /IndexedDB/idbcursor-direction-index.any.serviceworker.html
  • CRASH [expected OK] /domparsing/DOMParser-parseFromString-html.html
  • TIMEOUT [expected OK] /html/browsers/browsing-the-web/history-traversal/srcdoc/consecutive-srcdoc.html
    • TIMEOUT [expected FAIL] subtest: changing srcdoc to about:srcdoc#yo then another srcdoc does two push navigations and we can navigate back

      Test timed out
      

  • OK [expected TIMEOUT] /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/form-submit.html
    • FAIL [expected TIMEOUT] subtest: Replace before load, triggered by same-document formElement.submit()

      assert_equals: history.length must not change after waiting for the replacement expected 3 but got 4
      

  • CRASH [expected OK] /wasm/jsapi/exception/is.tentative.any.html

@github-actions
Copy link
Copy Markdown

⚠️ Try run (#21988582683) failed!

@simonwuelker
Copy link
Copy Markdown
Member Author

Hmm. Many seemingly intermittent crashes(timeouts?) that seem completely unrelated, that don't reproduce locally.
The devtools server shouldn't even run during WPT. How curious.

@simonwuelker
Copy link
Copy Markdown
Member Author

Oh i bet its because I don't have #42562 on my branch yet.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
@simonwuelker simonwuelker force-pushed the devtools-dead-connections branch from 9b20876 to 1a5911f Compare February 13, 2026 14:27
@servo-highfive servo-highfive removed the S-tests-failed The changes caused existing tests to fail. label Feb 13, 2026
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Feb 13, 2026
@simonwuelker simonwuelker added this pull request to the merge queue Feb 13, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 13, 2026
Merged via the queue into servo:main with commit 53ffdda Feb 13, 2026
33 checks passed
@simonwuelker simonwuelker deleted the devtools-dead-connections branch February 13, 2026 15:27
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Feb 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-devtools S-awaiting-review There is new code that needs to be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants