diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 32244b218..aa9d99ec3 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -850,6 +850,7 @@ pid_t startProcess(std::function fun, const string & errorPrefix) if (pid == -1) throw SysError("unable to fork"); if (pid == 0) { + _writeToStderr = defaultWriteToStderr; try { restoreAffinity(); fun(); diff --git a/src/nix-daemon/nix-daemon.cc b/src/nix-daemon/nix-daemon.cc index 250d03653..83d920735 100644 --- a/src/nix-daemon/nix-daemon.cc +++ b/src/nix-daemon/nix-daemon.cc @@ -29,7 +29,6 @@ static FdSource from(STDIN_FILENO); static FdSink to(STDOUT_FILENO); bool canSendStderr; -pid_t myPid; /* This function is called anytime we want to write something to @@ -38,11 +37,7 @@ pid_t myPid; socket. */ static void tunnelStderr(const unsigned char * buf, size_t count) { - /* Don't send the message to the client if we're a child of the - process handling the connection. Otherwise we could screw up - the protocol. It's up to the parent to redirect stderr and - send it to the client somehow (e.g., as in build.cc). */ - if (canSendStderr && myPid == getpid()) { + if (canSendStderr) { try { writeInt(STDERR_NEXT, to); writeString(buf, count, to); @@ -533,7 +528,6 @@ static void processConnection(bool trusted) MonitorFdHup monitor(from.fd); canSendStderr = false; - myPid = getpid(); _writeToStderr = tunnelStderr; /* Exchange the greeting. */