diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-12-05 18:07:46 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-12-05 18:07:46 +0000 |
commit | 4c1c37d0b6f4f8e7331b359617d7071c5e6e42fb (patch) | |
tree | a974fd42647c26b368de4fb9e97b6020c18faea6 | |
parent | 8d1854c3f19848fa6435aaa0fc688230ccc478c2 (diff) |
* FreeBSD returns ESRCH when there are no processes to kill.
-rw-r--r-- | src/libstore/build.cc | 12 |
1 files 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); } |