Skip to content

Interrupted long-running build prints a crash report instead of exiting cleanly #429

@schickling-assistant

Description

@schickling-assistant

Summary

When a long-running Determinate Nix build is interrupted, nix prints a crash banner and stack trace instead of treating the interrupt as a normal user cancellation.

I hit this while verifying a Home Manager config, but the bug appears to be the interrupt handling/reporting path itself, not the specific derivation.

Environment

  • Determinate Nix: nix (Determinate Nix 3.17.0) 2.33.3
  • macOS: 26.2 (25C56)
  • Host: mbp2025
  • Architecture: arm64

Command

home-manager switch --flake .#mbp2025 --no-write-lock-file

This delegated to:

nix build .#homeConfigurations."mbp2025".activationPackage --out-link /var/folders/.../generation --no-write-lock-file

Repro Shape

I can reproduce the failure mode with a long-running build in a PTY-backed session:

  1. Start a long-running nix build / home-manager switch
  2. Interrupt the build
  3. Determinate Nix prints a crash report

In my case the build was in:

building '/nix/store/anwmra3n5jp0zhb8qykdrv7marny6f12-grafana-dashboard-modules-root.drv'...

Actual Behavior

Instead of cleanly reporting interruption, Determinate Nix emits:

error: interrupted by the user
Determinate Nix crashed. This is a bug. Please report this at https://github.com/DeterminateSystems/nix-src/issues with the following information included:

Exception: nix::Interrupted: error: interrupted by the user
Stack trace:
 0# nix::(anonymous namespace)::onTerminate() in /nix/store/w75hyfqa1p3vy04x8zn4237pqgqfwicp-determinate-nix-3.17.0/bin/nix
 1# std::__terminate(void (*)()) in /nix/store/sg5gfy9cj0991jbd4xfyrl21rmqib9r2-libcxx-19.1.7/lib/libc++abi.1.0.dylib
 2# __cxa_rethrow in /nix/store/sg5gfy9cj0991jbd4xfyrl21rmqib9r2-libcxx-19.1.7/lib/libc++abi.1.0.dylib
 3# nix::ignoreExceptionExceptInterrupt(nix::Verbosity) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
 4# nix::JSONLogger::write(...) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
 5# nix::JSONLogger::logEI(...) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
 6# nix::TeeLogger::logEI(...) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
 7# nix::handleExceptions(...) in /nix/store/yijfh1mylylgbs1j7sp35n517wf7ccfc-determinate-nix-main-3.17.0/lib/libnixmain.2.33.3.dylib
 8# main in /nix/store/w75hyfqa1p3vy04x8zn4237pqgqfwicp-determinate-nix-3.17.0/bin/nix

Expected Behavior

A user interrupt should be handled as a normal cancellation path:

  • print error: interrupted by the user or similar
  • exit cleanly
  • do not print Determinate Nix crashed. This is a bug.
  • do not emit a crash-style stack trace for an ordinary interrupt

Notes

I am not claiming the underlying build should have succeeded. The bug report is specifically about Determinate Nix treating an interrupt as an internal crash condition.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions