mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Clean up broken test for whether to wait for input in SSL case.
Per discussion with Magnus Hagander.
This commit is contained in:
@ -11,7 +11,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.174 2000/10/24 21:33:52 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.175 2000/10/25 22:27:25 tgl Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
*
|
*
|
||||||
@ -262,7 +262,7 @@ static void InitSSL(void);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CYR_RECODE
|
#ifdef CYR_RECODE
|
||||||
void GetCharSetByHost(char *, int, char *);
|
extern void GetCharSetByHost(char *, int, char *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -803,8 +803,27 @@ ServerLoop(void)
|
|||||||
Port *port;
|
Port *port;
|
||||||
fd_set rmask,
|
fd_set rmask,
|
||||||
wmask;
|
wmask;
|
||||||
|
struct timeval *timeout = (struct timeval *) NULL;
|
||||||
#ifdef USE_SSL
|
#ifdef USE_SSL
|
||||||
bool no_select = false;
|
struct timeval timeout_tv;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are using SSL, there may be input data already read and
|
||||||
|
* pending in SSL's input buffers. If so, check for additional
|
||||||
|
* input from other clients, but don't delay before processing.
|
||||||
|
*/
|
||||||
|
for (curr = DLGetHead(PortList); curr; curr = DLGetSucc(curr))
|
||||||
|
{
|
||||||
|
Port *port = (Port *) DLE_VAL(curr);
|
||||||
|
|
||||||
|
if (port->ssl && SSL_pending(port->ssl))
|
||||||
|
{
|
||||||
|
timeout_tv.tv_sec = 0;
|
||||||
|
timeout_tv.tv_usec = 0;
|
||||||
|
timeout = &timeout_tv;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -813,24 +832,9 @@ ServerLoop(void)
|
|||||||
memcpy((char *) &rmask, (char *) &readmask, sizeof(fd_set));
|
memcpy((char *) &rmask, (char *) &readmask, sizeof(fd_set));
|
||||||
memcpy((char *) &wmask, (char *) &writemask, 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 = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (no_select)
|
|
||||||
FD_ZERO(&rmask); /* So we don't accept() anything below */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PG_SETMASK(&UnBlockSig);
|
PG_SETMASK(&UnBlockSig);
|
||||||
|
|
||||||
if (select(nSockets, &rmask, &wmask, (fd_set *) NULL,
|
if (select(nSockets, &rmask, &wmask, (fd_set *) NULL, timeout) < 0)
|
||||||
(struct timeval *) NULL) < 0)
|
|
||||||
{
|
{
|
||||||
if (errno == EINTR || errno == EWOULDBLOCK)
|
if (errno == EINTR || errno == EWOULDBLOCK)
|
||||||
continue;
|
continue;
|
||||||
@ -894,8 +898,10 @@ ServerLoop(void)
|
|||||||
(void *) port);
|
(void *) port);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build up new masks for select(). */
|
/*
|
||||||
|
* Scan active ports, processing any available input. While we
|
||||||
|
* are at it, build up new masks for next select().
|
||||||
|
*/
|
||||||
nSockets = initMasks(&readmask, &writemask);
|
nSockets = initMasks(&readmask, &writemask);
|
||||||
|
|
||||||
curr = DLGetHead(PortList);
|
curr = DLGetHead(PortList);
|
||||||
@ -946,7 +952,7 @@ ServerLoop(void)
|
|||||||
/*
|
/*
|
||||||
* Can't start backend if max backend count is exceeded.
|
* Can't start backend if max backend count is exceeded.
|
||||||
*
|
*
|
||||||
* The same when shutdowning data base.
|
* The same when data base is in startup/shutdown mode.
|
||||||
*/
|
*/
|
||||||
if (Shutdown > NoShutdown)
|
if (Shutdown > NoShutdown)
|
||||||
PacketSendError(&port->pktInfo,
|
PacketSendError(&port->pktInfo,
|
||||||
@ -966,8 +972,8 @@ ServerLoop(void)
|
|||||||
/*
|
/*
|
||||||
* If the backend start fails then keep the connection
|
* If the backend start fails then keep the connection
|
||||||
* open to report it. Otherwise, pretend there is an
|
* open to report it. Otherwise, pretend there is an
|
||||||
* error to close the connection which will now be
|
* error to close our descriptor for the connection,
|
||||||
* managed by the backend.
|
* which will now be managed by the backend.
|
||||||
*/
|
*/
|
||||||
if (BackendStartup(port) != STATUS_OK)
|
if (BackendStartup(port) != STATUS_OK)
|
||||||
PacketSendError(&port->pktInfo,
|
PacketSendError(&port->pktInfo,
|
||||||
@ -1067,8 +1073,8 @@ readStartupPacket(void *arg, PacketLen len, void *pkt)
|
|||||||
char SSLok;
|
char SSLok;
|
||||||
|
|
||||||
#ifdef USE_SSL
|
#ifdef USE_SSL
|
||||||
if (!EnableSSL || port->laddr.sa.sa_family != AF_INET)
|
|
||||||
/* No SSL when disabled or on Unix sockets */
|
/* No SSL when disabled or on Unix sockets */
|
||||||
|
if (!EnableSSL || port->laddr.sa.sa_family != AF_INET)
|
||||||
SSLok = 'N';
|
SSLok = 'N';
|
||||||
else
|
else
|
||||||
SSLok = 'S'; /* Support for SSL */
|
SSLok = 'S'; /* Support for SSL */
|
||||||
@ -1082,7 +1088,8 @@ readStartupPacket(void *arg, PacketLen len, void *pkt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SSL
|
#ifdef USE_SSL
|
||||||
if (SSLok == 'S') {
|
if (SSLok == 'S')
|
||||||
|
{
|
||||||
if (!(port->ssl = SSL_new(SSL_context)) ||
|
if (!(port->ssl = SSL_new(SSL_context)) ||
|
||||||
!SSL_set_fd(port->ssl, port->sock) ||
|
!SSL_set_fd(port->ssl, port->sock) ||
|
||||||
SSL_accept(port->ssl) <= 0)
|
SSL_accept(port->ssl) <= 0)
|
||||||
|
Reference in New Issue
Block a user