summaryrefslogtreecommitdiff
path: root/src/backend/postmaster/postmaster.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/postmaster/postmaster.c')
-rw-r--r--src/backend/postmaster/postmaster.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index fb45b89587b..a7858c40989 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.475.2.5 2006/05/19 15:15:38 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.475.2.6 2006/07/16 18:17:23 tgl Exp $
*
* NOTES
*
@@ -1408,8 +1408,12 @@ ProcessStartupPacket(Port *port, bool SSLdone)
#else
SSLok = 'N'; /* No support for SSL */
#endif
+
+retry1:
if (send(port->sock, &SSLok, 1, 0) != 1)
{
+ if (errno == EINTR)
+ goto retry1; /* if interrupted, just retry */
ereport(COMMERROR,
(errcode_for_socket_access(),
errmsg("failed to send SSL negotiation response: %m")));
@@ -2545,6 +2549,7 @@ static void
report_fork_failure_to_client(Port *port, int errnum)
{
char buffer[1000];
+ int rc;
/* Format the error message packet (always V2 protocol) */
snprintf(buffer, sizeof(buffer), "E%s%s\n",
@@ -2555,7 +2560,11 @@ report_fork_failure_to_client(Port *port, int errnum)
if (!pg_set_noblock(port->sock))
return;
- send(port->sock, buffer, strlen(buffer) + 1, 0);
+ /* We'll retry after EINTR, but ignore all other failures */
+ do
+ {
+ rc = send(port->sock, buffer, strlen(buffer) + 1, 0);
+ } while (rc < 0 && errno == EINTR);
}