From 4c1c37d0b6f4f8e7331b359617d7071c5e6e42fb Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 5 Dec 2006 18:07:46 +0000 Subject: [PATCH] * FreeBSD returns ESRCH when there are no processes to kill. --- src/libstore/build.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 202fb0ac4..6e71c2c7d 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -450,11 +450,15 @@ static void killUser(uid_t uid) if (setuid(uid) == -1) abort(); - if (kill(-1, SIGKILL) == -1) - throw SysError(format("cannot kill processes for UID `%1%'") % uid); + while (true) { + if (kill(-1, SIGKILL) == 0) break; + if (errno == ESRCH) break; /* no more processes */ + if (errno != EINTR) + throw SysError(format("cannot kill processes for UID `%1%'") % uid); + } } catch (std::exception & e) { - std::cerr << format("build error: %1%\n") % e.what(); + std::cerr << format("killing build users: %1%\n") % e.what(); quickExit(1); } quickExit(0); @@ -965,7 +969,7 @@ DerivationGoal::HookReply DerivationGoal::tryBuildHook() throw SysError(format("executing `%1%'") % buildHook); } catch (std::exception & e) { - std::cerr << format("build error: %1%\n") % e.what(); + std::cerr << format("build hook error: %1%\n") % e.what(); } quickExit(1); }