Title: Intermittent SIGSEGV in Maglev concurrent compilation on Linux (PersistentHandles::GetHandle) — regression between v24.14.1 and v24.15.0 · Issue #64841 · nodejs/node · GitHub
Open Graph Title: Intermittent SIGSEGV in Maglev concurrent compilation on Linux (PersistentHandles::GetHandle) — regression between v24.14.1 and v24.15.0 · Issue #64841 · nodejs/node
X Title: Intermittent SIGSEGV in Maglev concurrent compilation on Linux (PersistentHandles::GetHandle) — regression between v24.14.1 and v24.15.0 · Issue #64841 · nodejs/node
Description: Version v24.15.0 through v24.18.1 (current LTS). v24.14.1 is not affected. Platform Linux 6.8.0-136-generic x86_64 (Ubuntu 24.04.4, glibc 2.39) — also observed on GitHub Actions ubuntu-latest. Not the Windows-only issue from #62991 (that...
Open Graph Description: Version v24.15.0 through v24.18.1 (current LTS). v24.14.1 is not affected. Platform Linux 6.8.0-136-generic x86_64 (Ubuntu 24.04.4, glibc 2.39) — also observed on GitHub Actions ubuntu-latest. Not ...
X Description: Version v24.15.0 through v24.18.1 (current LTS). v24.14.1 is not affected. Platform Linux 6.8.0-136-generic x86_64 (Ubuntu 24.04.4, glibc 2.39) — also observed on GitHub Actions ubuntu-latest. Not ...
Opengraph URL: https://github.com/nodejs/node/issues/64841
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Intermittent SIGSEGV in Maglev concurrent compilation on Linux (PersistentHandles::GetHandle) — regression between v24.14.1 and v24.15.0","articleBody":"### Version\n\nv24.15.0 through v24.18.1 (current LTS). v24.14.1 is not affected.\n\n### Platform\n\nLinux 6.8.0-136-generic x86_64 (Ubuntu 24.04.4, glibc 2.39) — also observed on GitHub Actions `ubuntu-latest`. Not the Windows-only issue from #62991 (that was fixed in v24.16.0; this reproduces on Linux through v24.18.1).\n\n### Subsystem\n\nv8 (Maglev)\n\n### What steps will reproduce the bug?\n\nThe trigger is CPU-hot JS tiering up to Maglev while the machine is CPU-starved, so the repro pins several node processes to two cores. I hit it with an undici test that runs tight request/teardown loops, but the crash is in V8's concurrent compiler thread and has nothing to do with undici's native surface (no addons; the crashing thread is a Maglev compile job):\n\n```bash\ngit clone https://github.com/nodejs/undici.git && cd undici # tested at c76fe46e\nnpm i\nfor i in $(seq 1 6); do\n (taskset -c 0,1 node test/http2-request-never-settles.js >/dev/null 2>&1; echo \"run $i: exit $?\") &\ndone; wait\n```\n\nRepeat the batch a few times; on v24.18.x roughly 1 in 5–10 processes exits 139 (SIGSEGV) with no output.\n\n### How often does it reproduce? Is there a required condition?\n\nWith 6 processes pinned to 2 cores (48 runs per version, same machine):\n\n| Node | V8 | SIGSEGV rate |\n|---|---|---|\n| v24.14.1 | 13.6.233.17-node.44 | 0/96 |\n| v24.16.0 | 13.6.233.17-node.49 | 1/48 |\n| v24.18.0 | 13.6.233.17-node.50 | 9/48 |\n| v24.18.1 | 13.6.233.17-node.50 | 5/48 |\n| v24.18.1 `--no-maglev` | 13.6.233.17-node.50 | 0/48 |\n\nCPU contention is the required condition — on an idle machine with a single process it passes reliably. `--no-maglev` eliminates the crash entirely.\n\nThe regression window is the V8 cherry-picks between `13.6.233.17-node.44` (v24.14.1) and `-node.48/49` (v24.15.0/v24.16.0), with the rate increasing at `-node.50`.\n\n### What is the expected behavior? Why is that the expected behavior?\n\nThe process should not segfault.\n\n### What do you see instead?\n\nThe child dies on SIGSEGV with no output at all, which surfaces in `node:test`/borp-based CI as the file-level `✖ ... 'test failed'` with no failing subtest — easy to misread as a flaky test. Real-world sighting on undici's CI (Node 24.18.0, ubuntu-latest): https://github.com/nodejs/undici/actions/runs/30488013544/job/90698464241?pr=5623\n\nNative stack captured with segfault-handler, identical in 6 of 7 crashes (addresses symbolized with addr2line against the release binary):\n\n```\nPID 31631 received SIGSEGV for address: 0x10013a01aa0\nv8::internal::PersistentHandles::GetHandle(unsigned long)\nv8::internal::compiler::BytecodeArrayRef::SourcePositionTable(v8::internal::compiler::JSHeapBroker*) const\nv8::internal::maglev::MaglevGraphBuilder::MaglevGraphBuilder(v8::internal::LocalIsolate*, v8::internal::maglev::MaglevCompilationUnit*, v8::internal::maglev::Graph*, v8::internal::maglev::MaglevCallerDetails*)\nv8::internal::maglev::MaglevCompiler::Compile(v8::internal::LocalIsolate*, v8::internal::maglev::MaglevCompilationInfo*)\nv8::internal::maglev::MaglevCompilationJob::ExecuteJobImpl(v8::internal::RuntimeCallStats*, v8::internal::LocalIsolate*)\nv8::internal::OptimizedCompilationJob::ExecuteJob(v8::internal::RuntimeCallStats*, v8::internal::LocalIsolate*)\nv8::internal::maglev::MaglevConcurrentDispatcher::JobTask::Run(v8::JobDelegate*)\nv8::platform::DefaultJobWorker::Run()\nnode::(anonymous namespace)::PlatformWorkerThread(void*)\n```\n\nThe faulting addresses look like out-of-cage pointers (`0x10013a01aa0`, `0x1004128d270`), consistent with a bogus persistent-handle index/slot read on the background thread.\n\nOne outlier crash (1 of 7) was a null deref on the main thread instead:\n\n```\nPID 32143 received SIGSEGV for address: 0x0\nnode::CallbackQueue\u003c...>::CallbackImpl\u003cnode::crypto::TLSWrap::EncOut()::{lambda(node::Environment*)#2}>::Call(node::Environment*)\nnode::Environment::RunAndClearNativeImmediates(bool)\nnode::Environment::CheckImmediate(uv_check_t*)\nuv_run\n```\n\nPossibly fallout from the same corruption, but noting it in case it's a separate race.\n\n### Additional information\n\nThe workload that triggers it is pure JS churn: an HTTP/2 client/server in-process with rapid stream resets, GOAWAYs and session teardown, i.e. lots of short-lived hot functions being tiered up concurrently. Happy to help narrow the V8 cherry-pick range or test candidate fixes.\n\n---\n\nDisclaimer: I created this report with the help of AI.\n","author":{"url":"https://github.com/mcollina","@type":"Person","name":"mcollina"},"datePublished":"2026-07-30T09:51:10Z","url":"https://github.com/nodejs/node/issues/64841"}
| react-profiling | 0 |
| react-import-map | react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf |
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:c483a105-77bd-4222-e4c7-b0b9fcb76d5f |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DEE0:33C72F:B6E2D6:EE0DF6:6AED4735 |
| html-safe-nonce | c56e5d2196a670ee6109b4726aff43bfd8ebd873410fea3ed2cd7ca9623615d3 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJERUUwOjMzQzcyRjpCNkUyRDY6RUUwREY2OjZBRUQ0NzM1IiwidmlzaXRvcl9pZCI6IjExODg3MTg3NTc0Mzc4NTE0NDUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 6a5b9592157055d4c9fdfe1f167b569fd2675b6ca64dfc481d4962543eac37b4 |
| hovercard-subject-tag | issue:5018459420 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/64841/issue_layout |
| twitter:image | https://opengraph.githubassets.com/59c9ce0a73b7184592a9ae58bc366e3a0c7a31b8b5e9fb1d78d2d6a0be0aa189/nodejs/node/issues/64841 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/59c9ce0a73b7184592a9ae58bc366e3a0c7a31b8b5e9fb1d78d2d6a0be0aa189/nodejs/node/issues/64841 |
| og:image:alt | Version v24.15.0 through v24.18.1 (current LTS). v24.14.1 is not affected. Platform Linux 6.8.0-136-generic x86_64 (Ubuntu 24.04.4, glibc 2.39) — also observed on GitHub Actions ubuntu-latest. Not ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | mcollina |
| hostname | github.com |
| expected-hostname | github.com |
| None | 56fb42677ae87ed3e64410323d67980aa65d0485568a7858f874e7edfc6d1c11 |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c9a37e2423ed382cf39f70b5aa4b4858b40a3b0 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
| react-app-name | issues |
Links:
Viewport: width=device-width