Commit 612f1b01 authored by Tom Lane's avatar Tom Lane

Check for SIGHUP and process config file updates just after waiting

for input, not just before.
parent 4cafef5c
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* *
...@@ -803,14 +803,15 @@ ServerLoop(void) ...@@ -803,14 +803,15 @@ ServerLoop(void)
Port *port; Port *port;
fd_set rmask, fd_set rmask,
wmask; wmask;
#ifdef USE_SSL #ifdef USE_SSL
int no_select = 0; bool no_select = false;
#endif #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 #ifdef USE_SSL
for (curr = DLGetHead(PortList); curr; curr = DLGetSucc(curr)) for (curr = DLGetHead(PortList); curr; curr = DLGetSucc(curr))
...@@ -818,17 +819,16 @@ ServerLoop(void) ...@@ -818,17 +819,16 @@ ServerLoop(void)
if (((Port *) DLE_VAL(curr))->ssl && if (((Port *) DLE_VAL(curr))->ssl &&
SSL_pending(((Port *) DLE_VAL(curr))->ssl) > 0) SSL_pending(((Port *) DLE_VAL(curr))->ssl) > 0)
{ {
no_select = 1; no_select = true;
break; break;
} }
} }
PG_SETMASK(&UnBlockSig);
if (no_select) if (no_select)
FD_ZERO(&rmask); /* So we don't accept() anything below */ FD_ZERO(&rmask); /* So we don't accept() anything below */
else
#else
PG_SETMASK(&UnBlockSig);
#endif #endif
PG_SETMASK(&UnBlockSig);
if (select(nSockets, &rmask, &wmask, (fd_set *) NULL, if (select(nSockets, &rmask, &wmask, (fd_set *) NULL,
(struct timeval *) NULL) < 0) (struct timeval *) NULL) < 0)
{ {
...@@ -838,6 +838,21 @@ ServerLoop(void) ...@@ -838,6 +838,21 @@ ServerLoop(void)
progname, strerror(errno)); progname, strerror(errno));
return STATUS_ERROR; 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. * Select a random seed at the time of first receiving a request.
*/ */
...@@ -856,11 +871,8 @@ ServerLoop(void) ...@@ -856,11 +871,8 @@ ServerLoop(void)
} }
/* /*
* 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 #ifdef HAVE_UNIX_SOCKETS
if (ServerSock_UNIX != INVALID_SOCK && if (ServerSock_UNIX != INVALID_SOCK &&
...@@ -893,21 +905,12 @@ ServerLoop(void) ...@@ -893,21 +905,12 @@ ServerLoop(void)
Port *port = (Port *) DLE_VAL(curr); Port *port = (Port *) DLE_VAL(curr);
int status = STATUS_OK; int status = STATUS_OK;
Dlelem *next; Dlelem *next;
int readyread = 0;
if (FD_ISSET(port->sock, &rmask)
#ifdef USE_SSL #ifdef USE_SSL
if (port->ssl) || (port->ssl && SSL_pending(port->ssl))
{
if (SSL_pending(port->ssl) ||
FD_ISSET(port->sock, &rmask))
readyread = 1;
}
else
#endif #endif
if (FD_ISSET(port->sock, &rmask)) )
readyread = 1;
if (readyread)
{ {
if (DebugLvl > 1) if (DebugLvl > 1)
fprintf(stderr, "%s: ServerLoop:\t\thandling reading %d\n", fprintf(stderr, "%s: ServerLoop:\t\thandling reading %d\n",
...@@ -997,13 +1000,7 @@ ServerLoop(void) ...@@ -997,13 +1000,7 @@ ServerLoop(void)
} }
curr = next; curr = next;
} } /* loop over active ports */
if (got_SIGHUP)
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
}
} }
} }
...@@ -1269,7 +1266,6 @@ reset_shared(int port) ...@@ -1269,7 +1266,6 @@ reset_shared(int port)
static void static void
SIGHUP_handler(SIGNAL_ARGS) SIGHUP_handler(SIGNAL_ARGS)
{ {
got_SIGHUP = true;
if (Shutdown > SmartShutdown) if (Shutdown > SmartShutdown)
return; return;
got_SIGHUP = true; got_SIGHUP = true;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* this is the "main" module of the postgres backend and * this is the "main" module of the postgres backend and
...@@ -1618,7 +1618,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha ...@@ -1618,7 +1618,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
if (!IsUnderPostmaster) if (!IsUnderPostmaster)
{ {
puts("\nPOSTGRES backend interactive interface "); 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");
} }
/* /*
...@@ -1695,14 +1695,6 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha ...@@ -1695,14 +1695,6 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
parser_input = makeStringInfo(); 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. * (1) tell the frontend we're ready for a new query.
* *
...@@ -1738,7 +1730,18 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha ...@@ -1738,7 +1730,18 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
DisableNotifyInterrupt(); 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) switch (firstchar)
...@@ -1766,7 +1769,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha ...@@ -1766,7 +1769,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
* ---------------- * ----------------
*/ */
case 'Q': 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 * if there is nothing in the input buffer, don't bother
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment