Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Feb 2026 22:59:52 +0000
From:      Vladimir Kondratyev <wulf@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 20a3c611f53d - main - moused(8): Use KQUEUE_CPONFORK flag to pass kqueue fd through fork
Message-ID:  <698bb868.26527.40e88a73@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by wulf:

URL: https://cgit.FreeBSD.org/src/commit/?id=20a3c611f53dfad830f9907e24fa08b80b674860

commit 20a3c611f53dfad830f9907e24fa08b80b674860
Author:     Vladimir Kondratyev <wulf@FreeBSD.org>
AuthorDate: 2026-02-10 22:59:06 +0000
Commit:     Vladimir Kondratyev <wulf@FreeBSD.org>
CommitDate: 2026-02-10 22:59:06 +0000

    moused(8): Use KQUEUE_CPONFORK flag to pass kqueue fd through fork
    
    and use libc daemon() instead of private rfork-based copy.
---
 usr.sbin/moused/moused/moused.c | 58 ++---------------------------------------
 1 file changed, 2 insertions(+), 56 deletions(-)

diff --git a/usr.sbin/moused/moused/moused.c b/usr.sbin/moused/moused/moused.c
index 36cb8cc27eab..7de6832a1eb8 100644
--- a/usr.sbin/moused/moused/moused.c
+++ b/usr.sbin/moused/moused/moused.c
@@ -492,7 +492,6 @@ static void	usage(void);
 static void	log_or_warn(int log_pri, int errnum, const char *fmt, ...)
 		    __printflike(3, 4);
 
-static int	r_daemon(void);
 static enum device_if	r_identify_if(int fd);
 static enum device_type	r_identify_evdev(int fd);
 static enum device_type	r_identify_sysmouse(int fd);
@@ -761,7 +760,7 @@ main(int argc, char *argv[])
 
 	if ((cfd = open("/dev/consolectl", O_RDWR, 0)) == -1)
 		logerr(1, "cannot open /dev/consolectl");
-	if ((kfd = kqueue()) == -1)
+	if ((kfd = kqueuex(KQUEUE_CPONFORK)) == -1)
 		logerr(1, "cannot create kqueue");
 	if (portname == NULL && (dfd = connect_devd()) == -1)
 		logwarnx("cannot open devd socket");
@@ -827,7 +826,7 @@ main(int argc, char *argv[])
 				logerrx(1, "moused already running, pid: %d", mpid);
 			logwarn("cannot open pid file");
 		}
-		if (r_daemon()) {
+		if (daemon(0, 0)) {
 			int saved_errno = errno;
 			pidfile_remove(pfh);
 			errno = saved_errno;
@@ -1284,59 +1283,6 @@ log_or_warn(int log_pri, int errnum, const char *fmt, ...)
 	va_end(ap);
 }
 
-static int
-r_daemon(void)
-{
-	struct sigaction osa, sa;
-	pid_t newgrp;
-	int oerrno;
-	int osa_ok;
-	int nullfd;
-
-	/* A SIGHUP may be thrown when the parent exits below. */
-	sigemptyset(&sa.sa_mask);
-	sa.sa_handler = SIG_IGN;
-	sa.sa_flags = 0;
-	osa_ok = sigaction(SIGHUP, &sa, &osa);
-
-	/* Keep kqueue fd alive */
-	switch (rfork(RFPROC)) {
-	case -1:
-		return (-1);
-	case 0:
-		break;
-	default:
-		/*
-		 * A fine point:  _exit(0), not exit(0), to avoid triggering
-		 * atexit(3) processing
-		 */
-		_exit(0);
-	}
-
-	newgrp = setsid();
-	oerrno = errno;
-	if (osa_ok != -1)
-		sigaction(SIGHUP, &osa, NULL);
-
-	if (newgrp == -1) {
-		errno = oerrno;
-		return (-1);
-	}
-
-	(void)chdir("/");
-
-	nullfd = open("/dev/null", O_RDWR, 0);
-	if (nullfd != -1) {
-		(void)dup2(nullfd, STDIN_FILENO);
-		(void)dup2(nullfd, STDOUT_FILENO);
-		(void)dup2(nullfd, STDERR_FILENO);
-	}
-	if (nullfd > 2)
-		close(nullfd);
-
-	return (0);
-}
-
 static inline int
 bit_find(bitstr_t *array, int start, int stop)
 {


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?698bb868.26527.40e88a73>