*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.173 2000/10/21 15:43:26 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.174 2000/10/24 21:33:52 tgl Exp $
*
* NOTES
*
Port *port;
fd_set rmask,
wmask;
-
#ifdef USE_SSL
- int no_select = 0;
-
+ bool no_select = false;
#endif
- memmove((char *) &rmask, (char *) &readmask, sizeof(fd_set));
- memmove((char *) &wmask, (char *) &writemask, sizeof(fd_set));
+ /*
+ * Wait for something to happen.
+ */
+ memcpy((char *) &rmask, (char *) &readmask, sizeof(fd_set));
+ memcpy((char *) &wmask, (char *) &writemask, sizeof(fd_set));
#ifdef USE_SSL
for (curr = DLGetHead(PortList); curr; curr = DLGetSucc(curr))
if (((Port *) DLE_VAL(curr))->ssl &&
SSL_pending(((Port *) DLE_VAL(curr))->ssl) > 0)
{
- no_select = 1;
+ no_select = true;
break;
}
}
- PG_SETMASK(&UnBlockSig);
if (no_select)
FD_ZERO(&rmask); /* So we don't accept() anything below */
- else
-#else
- PG_SETMASK(&UnBlockSig);
#endif
+
+ PG_SETMASK(&UnBlockSig);
+
if (select(nSockets, &rmask, &wmask, (fd_set *) NULL,
(struct timeval *) NULL) < 0)
{
progname, strerror(errno));
return STATUS_ERROR;
}
+
+ /*
+ * Block all signals until we wait again
+ */
+ PG_SETMASK(&BlockSig);
+
+ /*
+ * Respond to signals, if needed
+ */
+ if (got_SIGHUP)
+ {
+ got_SIGHUP = false;
+ ProcessConfigFile(PGC_SIGHUP);
+ }
+
/*
* Select a random seed at the time of first receiving a request.
*/
}
/*
- * Block all signals
+ * new connection pending on our well-known port's socket?
*/
- PG_SETMASK(&BlockSig);
-
- /* new connection pending on our well-known port's socket */
#ifdef HAVE_UNIX_SOCKETS
if (ServerSock_UNIX != INVALID_SOCK &&
Port *port = (Port *) DLE_VAL(curr);
int status = STATUS_OK;
Dlelem *next;
- int readyread = 0;
+ if (FD_ISSET(port->sock, &rmask)
#ifdef USE_SSL
- if (port->ssl)
- {
- if (SSL_pending(port->ssl) ||
- FD_ISSET(port->sock, &rmask))
- readyread = 1;
- }
- else
+ || (port->ssl && SSL_pending(port->ssl))
#endif
- if (FD_ISSET(port->sock, &rmask))
- readyread = 1;
-
- if (readyread)
+ )
{
if (DebugLvl > 1)
fprintf(stderr, "%s: ServerLoop:\t\thandling reading %d\n",
}
curr = next;
- }
-
- if (got_SIGHUP)
- {
- got_SIGHUP = false;
- ProcessConfigFile(PGC_SIGHUP);
- }
+ } /* loop over active ports */
}
}
static void
SIGHUP_handler(SIGNAL_ARGS)
{
- got_SIGHUP = true;
if (Shutdown > SmartShutdown)
return;
got_SIGHUP = true;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.180 2000/10/07 14:39:14 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.181 2000/10/24 21:33:48 tgl Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface ");
- puts("$Revision: 1.180 $ $Date: 2000/10/07 14:39:14 $\n");
+ puts("$Revision: 1.181 $ $Date: 2000/10/24 21:33:48 $\n");
}
/*
parser_input = makeStringInfo();
- /* XXX this could be moved after ReadCommand below to get more
- * sensical behaviour */
- if (got_SIGHUP)
- {
- got_SIGHUP = false;
- ProcessConfigFile(PGC_SIGHUP);
- }
-
/* ----------------
* (1) tell the frontend we're ready for a new query.
*
DisableNotifyInterrupt();
/* ----------------
- * (5) process the command.
+ * (5) check for any other interesting events that happened
+ * while we slept.
+ * ----------------
+ */
+ if (got_SIGHUP)
+ {
+ got_SIGHUP = false;
+ ProcessConfigFile(PGC_SIGHUP);
+ }
+
+ /* ----------------
+ * (6) process the command.
* ----------------
*/
switch (firstchar)
* ----------------
*/
case 'Q':
- if (strspn(parser_input->data, " \t\n") == parser_input->len)
+ if (strspn(parser_input->data, " \t\r\n") == parser_input->len)
{
/* ----------------
* if there is nothing in the input buffer, don't bother