mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
Improve postmaster's behavior if an accept() call fails. Because the server
socket is still read-ready, the code was a tight loop, wasting lots of CPU. We can't do anything to clear the failure, other than wait, but we should give other processes more chance to finish and release FDs; so insert a small sleep. Also, avoid bogus "close(-1)" in this case. Per report from Jim Nasby.
This commit is contained in:
parent
b9c65aed82
commit
cf4cc7843c
@ -30,7 +30,7 @@
|
||||
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/libpq/pqcomm.c,v 1.189 2007/01/05 22:19:29 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/libpq/pqcomm.c,v 1.190 2007/02/13 19:18:53 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -528,7 +528,7 @@ Setup_AF_UNIX(void)
|
||||
|
||||
/*
|
||||
* StreamConnection -- create a new connection with client using
|
||||
* server port.
|
||||
* server port. Set port->sock to the FD of the new connection.
|
||||
*
|
||||
* ASSUME: that this doesn't need to be non-blocking because
|
||||
* the Postmaster uses select() to tell when the server master
|
||||
@ -548,6 +548,14 @@ StreamConnection(int server_fd, Port *port)
|
||||
ereport(LOG,
|
||||
(errcode_for_socket_access(),
|
||||
errmsg("could not accept new connection: %m")));
|
||||
/*
|
||||
* If accept() fails then postmaster.c will still see the server
|
||||
* socket as read-ready, and will immediately try again. To avoid
|
||||
* uselessly sucking lots of CPU, delay a bit before trying again.
|
||||
* (The most likely reason for failure is being out of kernel file
|
||||
* table slots; we can do little except hope some will get freed up.)
|
||||
*/
|
||||
pg_usleep(100000L); /* wait 0.1 sec */
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.520 2007/02/11 11:59:25 mha Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.521 2007/02/13 19:18:54 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
@ -1710,7 +1710,8 @@ ConnCreate(int serverFd)
|
||||
|
||||
if (StreamConnection(serverFd, port) != STATUS_OK)
|
||||
{
|
||||
StreamClose(port->sock);
|
||||
if (port->sock >= 0)
|
||||
StreamClose(port->sock);
|
||||
ConnFree(port);
|
||||
port = NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user