diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 5276b6dcf1c6c1369d1ad5618a8bbdc827594c66..e752d5e88715a1bb212e5dd22f54cea6ba04e9d7 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -11,7 +11,7 @@
  *
  *
  * 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
  *
@@ -803,14 +803,15 @@ ServerLoop(void)
 		Port	   *port;
 		fd_set		rmask,
 					wmask;
-
 #ifdef USE_SSL
-		int			no_select = 0;
-
+		bool		no_select = false;
 #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
 		for (curr = DLGetHead(PortList); curr; curr = DLGetSucc(curr))
@@ -818,17 +819,16 @@ ServerLoop(void)
 			if (((Port *) DLE_VAL(curr))->ssl &&
 				SSL_pending(((Port *) DLE_VAL(curr))->ssl) > 0)
 			{
-				no_select = 1;
+				no_select = true;
 				break;
 			}
 		}
-		PG_SETMASK(&UnBlockSig);
 		if (no_select)
 			FD_ZERO(&rmask);	/* So we don't accept() anything below */
-		else
-#else
-		PG_SETMASK(&UnBlockSig);
 #endif
+
+		PG_SETMASK(&UnBlockSig);
+
 		if (select(nSockets, &rmask, &wmask, (fd_set *) NULL,
 				   (struct timeval *) NULL) < 0)
 		{
@@ -838,6 +838,21 @@ ServerLoop(void)
 					progname, strerror(errno));
 			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.
 		 */
@@ -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
 		if (ServerSock_UNIX != INVALID_SOCK &&
@@ -893,21 +905,12 @@ ServerLoop(void)
 			Port	   *port = (Port *) DLE_VAL(curr);
 			int			status = STATUS_OK;
 			Dlelem	   *next;
-			int			readyread = 0;
 
+			if (FD_ISSET(port->sock, &rmask)
 #ifdef USE_SSL
-			if (port->ssl)
-			{
-				if (SSL_pending(port->ssl) ||
-					FD_ISSET(port->sock, &rmask))
-					readyread = 1;
-			}
-			else
+				|| (port->ssl && SSL_pending(port->ssl))
 #endif
-			if (FD_ISSET(port->sock, &rmask))
-				readyread = 1;
-
-			if (readyread)
+				)
 			{
 				if (DebugLvl > 1)
 					fprintf(stderr, "%s: ServerLoop:\t\thandling reading %d\n",
@@ -997,13 +1000,7 @@ ServerLoop(void)
 			}
 
 			curr = next;
-		}
-
-		if (got_SIGHUP)
-		{
-			got_SIGHUP = false;
-			ProcessConfigFile(PGC_SIGHUP);
-		}
+		} /* loop over active ports */
 	}
 }
 
@@ -1269,7 +1266,6 @@ reset_shared(int port)
 static void
 SIGHUP_handler(SIGNAL_ARGS)
 {
-	got_SIGHUP = true;
 	if (Shutdown > SmartShutdown)
 		return;
 	got_SIGHUP = true;
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 04a7abb002f2fe1e087361794859db37de29d640..d4c37c91a07b508c3581deba6de6f9fa8e5a51b9 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
  *
  *
  * 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
  *	  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)
 	{
 		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();
 
-		/* 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.
 		 *
@@ -1738,7 +1730,18 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
 		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)
@@ -1766,7 +1769,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
 				 * ----------------
 				 */
 			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