aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1997-02-13 08:32:20 +0000
committerMarc G. Fournier <scrappy@hub.org>1997-02-13 08:32:20 +0000
commita5494a2d92a2752c610b8b668a7d33478e90c160 (patch)
tree769c8680eb5ef423ba5af6a6af6efb3a70692f6b /src/backend
parent809ae06ab2fa2c8c442582b06e459bcf63554310 (diff)
downloadpostgresql-a5494a2d92a2752c610b8b668a7d33478e90c160.tar.gz
postgresql-a5494a2d92a2752c610b8b668a7d33478e90c160.zip
Various patches for nextstep by GregorHoffleit
Replaced NEED_STRDUP by !HAVE_STRDUP
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/postmaster/postmaster.c38
1 files changed, 33 insertions, 5 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index b1a5aeb8c39..5168162d2a0 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.38 1997/02/06 19:27:22 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.39 1997/02/13 08:31:09 scrappy Exp $
*
* NOTES
*
@@ -420,12 +420,16 @@ pmdaemonize(void)
if (fork())
exit(0);
-
+/* GH: If there's no setsid(), we hopefully don't need silent mode.
+ * Until there's a better solution.
+ */
+#ifdef HAVE_SETSID
if (setsid() < 0) {
fprintf(stderr, "%s: ", progname);
perror("cannot disassociate from controlling TTY");
exit(1);
}
+#endif
i = open(NULL_DEV, O_RDWR);
(void) dup2(i, 0);
(void) dup2(i, 1);
@@ -459,19 +463,30 @@ ServerLoop(void)
fd_set rmask, basemask;
int nSockets, nSelected, status, newFd;
Dlelem *next, *curr;
-/* int orgsigmask = sigblock(0); */
+ /* GH: For !HAVE_SIGPROCMASK (NEXTSTEP), TRH implemented
+ * an alternative interface.
+ */
+#ifdef HAVE_SIGPROCMASK
sigset_t oldsigmask, newsigmask;
+#else
+ int orgsigmask = sigblock(0);
+#endif
nSockets = ServerSock + 1;
FD_ZERO(&basemask);
FD_SET(ServerSock, &basemask);
+#ifdef HAVE_SIGPROCMASK
sigprocmask(0,0,&oldsigmask);
sigemptyset(&newsigmask);
sigaddset(&newsigmask,SIGCHLD);
+#endif
for (;;) {
-/* sigsetmask(orgsigmask); */
+#ifdef HAVE_SIGPROCMASK
sigprocmask(SIG_SETMASK,&oldsigmask,0);
+#else
+ sigsetmask(orgsigmask);
+#endif
newFd = -1;
memmove((char *) &rmask, (char *) &basemask, sizeof(fd_set));
if ((nSelected = select(nSockets, &rmask,
@@ -490,8 +505,11 @@ ServerLoop(void)
* manipulate the BackEnd list, and reaper() calls free() which is
* usually non-reentrant.)
*/
+#ifdef HAVE_SIGPROCMASK
sigprocmask(SIG_BLOCK, &newsigmask, &oldsigmask);
-/* sigblock(sigmask(SIGCHLD)); */ /* XXX[TRH] portability */
+#else
+ sigblock(sigmask(SIGCHLD)); /* XXX[TRH] portability */
+#endif
if (DebugLvl > 1) {
fprintf(stderr, "%s: ServerLoop: %d sockets pending\n",
progname, nSelected);
@@ -816,15 +834,25 @@ pmdie(SIGNAL_ARGS)
static void
reaper(SIGNAL_ARGS)
{
+/* GH: replace waitpid for !HAVE_WAITPID. Does this work ? */
+#ifdef HAVE_WAITPID
int status; /* backend exit status */
+#else
+ union wait statusp; /* backend exit status */
+#endif
int pid; /* process id of dead backend */
if (DebugLvl)
fprintf(stderr, "%s: reaping dead processes...\n",
progname);
#ifndef WIN32
+#ifdef HAVE_WAITPID
while((pid = waitpid(-1, &status, WNOHANG)) > 0)
CleanupProc(pid, status);
+#else
+ while((pid = wait3(&statusp, WNOHANG, NULL)) > 0)
+ CleanupProc(pid, statusp.w_status);
+#endif
#endif /* WIN32 */
}