+static void catch_child(int sig _U_)
+{
+ sigchild = 1;
+}
+
+/* ----------------------- */
+static void set_signal(void)
+{
+ struct sigaction sv;
+ sigset_t set;
+
+ signal(SIGPIPE, SIG_IGN);
+
+ sv.sa_handler = catch_child;
+ sv.sa_flags = SA_NOCLDSTOP;
+ sigemptyset(&sv.sa_mask);
+ if (sigaction(SIGCHLD, &sv, NULL) < 0) {
+ LOG(log_error, logtype_cnid, "cnid_metad: sigaction: %s", strerror(errno));
+ exit(1);
+ }
+ /* block everywhere but in pselect */
+ sigemptyset(&set);
+ sigaddset(&set, SIGCHLD);
+ sigprocmask(SIG_BLOCK, &set, NULL);