summaryrefslogtreecommitdiff
path: root/lib/TaskMan.cc
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2009-02-02 06:54:46 +0100
committerPixel <pixel@nobis-crew.org>2009-02-02 06:54:46 +0100
commit2a6b51c13e06dd3ded2b419339a6c4f72d8a365c (patch)
tree53c02c9e5a2448444b4b2a707c2bef9a1cde773a /lib/TaskMan.cc
parent6b289035db4f728a1987c42a56cc1cd484c8e97a (diff)
parenta6d6e86e81f6556696cba4e1971c684feb2608cd (diff)
Merge branch 'master' of ssh+git://pixel@git.grumpycoder.net/pub/repo.git/Baltisot
Diffstat (limited to 'lib/TaskMan.cc')
-rw-r--r--lib/TaskMan.cc18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/TaskMan.cc b/lib/TaskMan.cc
index e3ebd9a..83fe5aa 100644
--- a/lib/TaskMan.cc
+++ b/lib/TaskMan.cc
@@ -326,7 +326,12 @@ void TaskMan::Init() throw (GeneralException) {
signal(SIGPIPE, taskman_sigpipe);
signal(SIGHUP, taskman_sighup);
signal(SIGUSR1, taskman_sigusr1);
-
+
+#ifdef __APPLE__
+ sigemptyset(&sigchildset);
+ sigaddset(&sigchildset, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &sigchildset, 0);
+#else
sigset_t sigtempset;
sigemptyset(&sigchildset);
@@ -335,7 +340,8 @@ void TaskMan::Init() throw (GeneralException) {
sigprocmask(SIG_SETMASK, 0, &sigtempset);
sigaddset(&sigtempset, SIGCHLD);
sigprocmask(SIG_SETMASK, &sigtempset, 0);
-#endif
+#endif
+#endif
inited = true;
number = 0;
@@ -683,8 +689,14 @@ void TaskMan::MainLoop() throw (GeneralException) {
bool timeout_condition = no_burst && !Zombies.size() && !got_sigchild && !got_yield;
-#ifdef _WIN32
+#if defined(_WIN32) || defined(__APPLE__)
+#ifdef __APPLE__
+ sigprocmask(SIG_UNBLOCK, &sigchildset, 0);
+#endif
r = poll(ufsd, nfds, timeout_condition ? timeout : 0);
+#ifdef __APPLE__
+ sigprocmask(SIG_BLOCK, &sigchildset, 0);
+#endif
#else
struct timespec ttimeout = { 0, 0 };
if ((timeout != -1) && timeout_condition) {