Skip to content

Commit

Permalink
Merge pull request NixOS#9687 from edolstra/withFramedSink-ctrl-c-hang
Browse files Browse the repository at this point in the history
withFramedSink(): Receive interrupts on the stderr thread
  • Loading branch information
edolstra authored Jan 4, 2024
2 parents 65fad9b + 295a2ff commit 965cfe9
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/libstore/build/substitution-goal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include "substitution-goal.hh"
#include "nar-info.hh"
#include "finally.hh"
#include "signals.hh"

namespace nix {

Expand Down Expand Up @@ -217,6 +218,8 @@ void PathSubstitutionGoal::tryToRun()

thr = std::thread([this]() {
try {
ReceiveInterrupts receiveInterrupts;

/* Wake up the worker loop when we're done. */
Finally updateStats([this]() { outPipe.writeSide.close(); });

Expand Down
3 changes: 3 additions & 0 deletions src/libstore/remote-store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#include "logging.hh"
#include "callback.hh"
#include "filetransfer.hh"
#include "signals.hh"

#include <nlohmann/json.hpp>

namespace nix {
Expand Down Expand Up @@ -1066,6 +1068,7 @@ void RemoteStore::ConnectionHandle::withFramedSink(std::function<void(Sink & sin
std::thread stderrThread([&]()
{
try {
ReceiveInterrupts receiveInterrupts;
processStderr(nullptr, nullptr, false);
} catch (...) {
ex = std::current_exception();
Expand Down
2 changes: 2 additions & 0 deletions src/libutil/thread-pool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ void ThreadPool::process()

void ThreadPool::doWork(bool mainThread)
{
ReceiveInterrupts receiveInterrupts;

if (!mainThread)
interruptCheck = [&]() { return (bool) quit; };

Expand Down

0 comments on commit 965cfe9

Please sign in to comment.