* Theodore Ts'o <tytso@mit.edu>
*/
-#define __KERNEL_SYSCALLS__
-
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/init.h>
-#include <linux/unistd.h>
#include <linux/signal.h>
#include <linux/completion.h>
#include <linux/workqueue.h>
struct k_sigaction sa;
daemonize("%s/%d", startup->name, cpu);
- allow_signal(SIGCHLD);
current->flags |= PF_IOTHREAD;
cwq->thread = current;
complete(&startup->done);
- /* Install a handler so SIGCLD is delivered */
+ /* SIG_IGN makes children autoreap: see do_notify_parent(). */
sa.sa.sa_handler = SIG_IGN;
sa.sa.sa_flags = 0;
siginitset(&sa.sa.sa_mask, sigmask(SIGCHLD));
if (!list_empty(&cwq->worklist))
run_workqueue(cwq);
-
- if (signal_pending(current)) {
- while (waitpid(-1, NULL, __WALL|WNOHANG) > 0)
- /* SIGCHLD - auto-reaping */ ;
-
- /* zap all other signals */
- flush_signals(current);
- }
}
remove_wait_queue(&cwq->more_work, &wait);
complete(&cwq->exit);