aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/ssh.cc
diff options
context:
space:
mode:
authorTobias Möst <tbsmoest@gmail.com>2020-02-14 07:47:48 +0100
committerTobias Möst <tbsmoest@gmail.com>2020-02-14 07:51:44 +0100
commit3e347220c82d1537723f49aa03a93a6f9d294417 (patch)
treef6793726e57805e2b7652b130b37b6d8c277b432 /src/libstore/ssh.cc
parent9af10b753c8a636f828b148fc3a9aecd1c0067fa (diff)
Fix PR_SET_PDEATHSIG results in Broken pipe (#2395)
The ssh client is lazily started by the first worker thread, that requires a ssh connection. To avoid the ssh client to be killed, when the worker process is stopped, do not set PR_SET_PDEATHSIG.
Diffstat (limited to 'src/libstore/ssh.cc')
-rw-r--r--src/libstore/ssh.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libstore/ssh.cc b/src/libstore/ssh.cc
index 2ee7115c5..84548a6e4 100644
--- a/src/libstore/ssh.cc
+++ b/src/libstore/ssh.cc
@@ -33,6 +33,9 @@ std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(const std::string
out.create();
auto conn = std::make_unique<Connection>();
+ ProcessOptions options;
+ options.dieWithParent = false;
+
conn->sshPid = startProcess([&]() {
restoreSignals();
@@ -64,7 +67,7 @@ std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(const std::string
// could not exec ssh/bash
throw SysError("unable to execute '%s'", args.front());
- });
+ }, options);
in.readSide = -1;
@@ -91,6 +94,9 @@ Path SSHMaster::startMaster()
Pipe out;
out.create();
+ ProcessOptions options;
+ options.dieWithParent = false;
+
state->sshMaster = startProcess([&]() {
restoreSignals();
@@ -110,7 +116,7 @@ Path SSHMaster::startMaster()
execvp(args.begin()->c_str(), stringsToCharPtrs(args).data());
throw SysError("unable to execute '%s'", args.front());
- });
+ }, options);
out.writeSide = -1;