/*
- * Copyright (C) 2004-2008 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004-2010 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
+#include <sys/select.h>
#include "gcc-compat.h"
*
* \sa waitpid(2)
*/
-int reap_child(pid_t *pid)
+int reap_child(pid_t *pid, int *status)
{
- int status;
- *pid = waitpid(-1, &status, WNOHANG);
+ *pid = waitpid(-1, status, WNOHANG);
if (!*pid)
return 0;
if (*pid < 0)
return -ERRNO_TO_DSS_ERROR(errno);
- if (WIFEXITED(status))
+ if (WIFEXITED(*status))
DSS_DEBUG_LOG("child %i exited. Exit status: %i\n", (int)*pid,
- WEXITSTATUS(status));
- else if (WIFSIGNALED(status))
+ WEXITSTATUS(*status));
+ else if (WIFSIGNALED(*status))
DSS_DEBUG_LOG("child %i was killed by signal %i\n", (int)*pid,
- WTERMSIG(status));
+ WTERMSIG(*status));
else
DSS_WARNING_LOG("child %i terminated abormally\n", (int)*pid);
return 1;
DSS_DEBUG_LOG("catching signal %d\n", sig);
if (signal(sig, &generic_signal_handler) != SIG_ERR)
return 1;
- make_err_msg("signal %d", sig);
return -E_SIGNAL_SIG_ERR;
}
assert(r < 0);
if (err == EAGAIN)
return 0;
- make_err_msg("failed to read from signal pipe");
+ DSS_ERROR_LOG("failed to read from signal pipe\n");
return -ERRNO_TO_DSS_ERROR(err);
}