File:
[cvs.NetBSD.org] /
pkgsrc /
net /
parpd /
patches /
Attic /
patch-parpd.c
Revision
1.1:
download - view:
text,
annotated -
select for diffs
Mon Jun 26 09:59:16 2017 UTC (7 years, 8 months ago) by
manu
Branches:
MAIN
CVS tags:
pkgsrc-2023Q1-base,
pkgsrc-2023Q1,
pkgsrc-2022Q4-base,
pkgsrc-2022Q4,
pkgsrc-2022Q3-base,
pkgsrc-2022Q3,
pkgsrc-2022Q2-base,
pkgsrc-2022Q2,
pkgsrc-2022Q1-base,
pkgsrc-2022Q1,
pkgsrc-2021Q4-base,
pkgsrc-2021Q4,
pkgsrc-2021Q3-base,
pkgsrc-2021Q3,
pkgsrc-2021Q2-base,
pkgsrc-2021Q2,
pkgsrc-2021Q1-base,
pkgsrc-2021Q1,
pkgsrc-2020Q4-base,
pkgsrc-2020Q4,
pkgsrc-2020Q3-base,
pkgsrc-2020Q3,
pkgsrc-2020Q2-base,
pkgsrc-2020Q2,
pkgsrc-2020Q1-base,
pkgsrc-2020Q1,
pkgsrc-2019Q4-base,
pkgsrc-2019Q4,
pkgsrc-2019Q3-base,
pkgsrc-2019Q3,
pkgsrc-2019Q2-base,
pkgsrc-2019Q2,
pkgsrc-2019Q1-base,
pkgsrc-2019Q1,
pkgsrc-2018Q4-base,
pkgsrc-2018Q4,
pkgsrc-2018Q3-base,
pkgsrc-2018Q3,
pkgsrc-2018Q2-base,
pkgsrc-2018Q2,
pkgsrc-2018Q1-base,
pkgsrc-2018Q1,
pkgsrc-2017Q4-base,
pkgsrc-2017Q4,
pkgsrc-2017Q3-base,
pkgsrc-2017Q3,
pkgsrc-2017Q2-base,
pkgsrc-2017Q2,
HEAD
Fix kqueue usage when forking in the background
This restores parpd functionnality on NetBSD 7.x
Submitted upstream as https://dev.marples.name/T127
$NetBSD: patch-parpd.c,v 1.1 2017/06/26 09:59:16 manu Exp $
Submitted upstream as https://dev.marples.name/T127
From 63d9d122d83dc358c6180d52187026f099ab6389 Mon Sep 17 00:00:00 2001
From: Emmanuel Dreyfus <manu@netbsd.org>
Date: Mon, 26 Jun 2017 11:38:39 +0200
Subject: [PATCH] Fix kqueue usage when forking in the background
NetBSD's kqueue(2) man page says "The queue is not inherited by a
child created with fork(2)", which means the poll_fd needs to be
reopen after forking in the background.
This is done by calling eloop_requeue() after daemon().
---
parpd.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git parpd.c parpd.c
index a178696..dbf26c4 100644
--- parpd.c
+++ parpd.c
@@ -718,9 +718,17 @@ main(int argc, char **argv)
goto out;
}
- if (!fflag && daemon(0, 0) == -1) {
- syslog(LOG_ERR, "daemon: %m");
- goto out;
+ if (!fflag) {
+ if (daemon(0, 0) == -1) {
+ syslog(LOG_ERR, "daemon: %m");
+ goto out;
+ }
+
+ /* At least for kqueue, poll_fd gets invalidated by fork */
+ if (eloop_requeue(eloop) == -1) {
+ syslog(LOG_ERR, "eloop_requeue after fork: %m");
+ goto out;
+ }
}
opt = eloop_start(eloop, &sigset);
--
2.11.0
CVSweb <webmaster@jp.NetBSD.org>