Repository navigation
Conversation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This reverts commit ef5660e49e5c319e6c62e7020524f33b237832d8.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This reverts commit 9e54afff22bf2ce7841e56055f327898dea7f96d.
Based on NixOS#520311
Cherry-picks pkgs/development/compilers/rust/1_95.nix and the rustPackages_1_95 wiring from staging-next 6534ba3, without flipping the rust/rustPackages default away from 1_94 (which would trigger a stdenv-wide rebuild).
Pinned to rustPackages_1_95 because oxc_transformer 0.129.0 uses `if let` guards, which were not stabilized until Rust 1.95.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The v11 store index can contain a sideEffects map alongside the top-level files map, where each value is { added: Map<path, FileMetadata>, deleted?: string[] }. The previous fixup only zeroed checkedAt on top-level files, leaving sideEffects[*].added.checkedAt timestamps in the SQLite store, which caused fetchPnpmDeps tarballs to vary across builders for any package with native postinstall side effects.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The pnpm v11 store uses a SQLite database (index.db) whose binary format is non-deterministic across platforms (page ordering, free lists differ). This caused hash mismatches when building the same pnpmDeps on different machines despite identical logical content. Fix by dumping the SQLite database to a text SQL file during the fetch phase and reconstructing it during the build phase. This ensures the stored representation is fully deterministic. Also fix broken `export` statements for pnpm_config_side_effects_cache and pnpm_config_update_notifier which were missing `=` signs. (cherry-picked from NixOS#521987) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
libuv's kqueue poller (`uv__io_poll` in `kqueue.c`) asserts that when `kevent()` returns -1, `errno` must be `EINTR`. However, `kevent()` can also return `EBADF` when a file descriptor is closed while still in the kqueue changelist, or `ENOENT` when removed between changelist submit and the kevent call. This surfaces as an `Abort trap: 6` (SIGABRT) on Darwin when running pnpm in the Nix build sandbox with Node.js 24.15.0+, due to changes in ArrayBuffer transfer semantics that alter FD lifecycle timing. The fix relaxes the assertion to accept EBADF and ENOENT in addition to EINTR, all of which are transient conditions that the existing retry logic already handles correctly. Reproducer: `pnpm install --force` with 1400+ packages in nix sandbox. Upstream: libuv/libuv#976 Assisted-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
The PR's base branch is set to master, but this PR causes 7964 rebuilds.
It is therefore considered a mass rebuild.
Please change the base branch to the right base branch for your changes (probably staging).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes a
SIGABRT(Abort trap: 6) crash in Node.js on Darwin (macOS) caused by libuv's kqueue poller assertingerrno == EINTRafterkevent()fails.kevent()can also returnEBADF(closed fd still in changelist) orENOENT(fd removed between changelist submit and kevent call). This triggers most reliably with Node.js 24.15.0+ running pnpm with large package sets (1400+ packages) inside the Nix build sandbox, due to changes in ArrayBuffer transfer semantics (nodejs/node#61372) that alter file descriptor lifecycle timing.The assertion (
deps/uv/src/unix/kqueue.c:294) is present in all Node.js versions (22, 24, 26) since they all bundle libuv 1.51.0. The patch relaxes it to acceptEBADFandENOENTalongsideEINTR— all transient conditions that the existing retry logic already handles correctly.Root cause chain:
kevent()returnsEBADFinstead ofEINTRassert(errno == EINTR)fires → SIGABRTUpstream references:
Things done
passthru.tests.nixpkgs-reviewon this PR. See nixpkgs-review usage../result/bin/.