mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Check for SIGHUP and process config file updates just after waiting
for input, not just before.
This commit is contained in:
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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
|
|||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
|||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
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
|
||||||
|
Reference in New Issue
Block a user