From 503edbdbffe5584282ad33866fe6f3b72a2c02ae Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 3 Apr 2005 00:01:51 +0000
Subject: [PATCH] Put back code mistakenly removed from copy of postmaster's
 daemonize routine, namely forcing stdin/stdout/stderr to point to /dev/null. 
 Per Karl Denninger.

---
 contrib/pg_autovacuum/pg_autovacuum.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/contrib/pg_autovacuum/pg_autovacuum.c b/contrib/pg_autovacuum/pg_autovacuum.c
index 388b7313322..fdbd285f107 100644
--- a/contrib/pg_autovacuum/pg_autovacuum.c
+++ b/contrib/pg_autovacuum/pg_autovacuum.c
@@ -4,7 +4,7 @@
  * Revisions by Christopher B. Browne, Liberty RMS
  * Win32 Service code added by Dave Page
  *
- * $PostgreSQL: pgsql/contrib/pg_autovacuum/pg_autovacuum.c,v 1.29 2005/01/26 22:25:13 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/pg_autovacuum/pg_autovacuum.c,v 1.30 2005/04/03 00:01:51 tgl Exp $
  */
 
 #include "postgres_fe.h"
@@ -18,6 +18,8 @@
 #ifdef WIN32
 #include <windows.h>
 #endif
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #include "pg_autovacuum.h"
 
@@ -186,13 +188,13 @@ log_entry(const char *logentry, int level)
  * Function used to detach the pg_autovacuum daemon from the tty and go into
  * the background.
  *
- * This code is mostly ripped directly from pm_dameonize in postmaster.c with
- * unneeded code removed.
+ * This code is ripped directly from pmdaemonize in postmaster.c.
  */
 #ifndef WIN32
 static void
 daemonize(void)
 {
+	int			i;
 	pid_t		pid;
 
 	pid = fork();
@@ -209,7 +211,8 @@ daemonize(void)
 	}
 
 /* GH: If there's no setsid(), we hopefully don't need silent mode.
- * Until there's a better solution.  */
+ * Until there's a better solution.
+ */
 #ifdef HAVE_SETSID
 	if (setsid() < 0)
 	{
@@ -218,7 +221,11 @@ daemonize(void)
 		_exit(1);
 	}
 #endif
-
+	i = open(NULL_DEV, O_RDWR);
+	dup2(i, 0);
+	dup2(i, 1);
+	dup2(i, 2);
+	close(i);
 }
 #endif   /* WIN32 */
 
-- 
GitLab