diff --git a/src/backend/port/sysv_sema.c b/src/backend/port/sysv_sema.c
index 65f922e0230c1bdbba44c410291bd872f91261d4..2988561d0ae700311c9a0034b3bb6356f27c0969 100644
--- a/src/backend/port/sysv_sema.c
+++ b/src/backend/port/sysv_sema.c
@@ -405,8 +405,8 @@ PGSemaphoreLock(PGSemaphore sema, bool interruptOK)
 	 * it's necessary for cancel/die interrupts to be serviced directly by the
 	 * signal handler.	On these platforms the behavior is really the same
 	 * whether the signal arrives just before the semop() begins, or while it
-	 * is waiting.	The loop on EINTR is thus important only for other types
-	 * of interrupts.
+	 * is waiting.	The loop on EINTR is thus important only for platforms
+	 * without SA_RESTART.
 	 */
 	do
 	{
diff --git a/src/port/pqsignal.c b/src/port/pqsignal.c
index 1511e932afed13bb58520826a1d973abb6f69c7d..8c82c9371c0bbed1c1bd3615edf573650922d1b7 100644
--- a/src/port/pqsignal.c
+++ b/src/port/pqsignal.c
@@ -60,9 +60,7 @@ pqsignal(int signo, pqsigfunc func)
 
 	act.sa_handler = func;
 	sigemptyset(&act.sa_mask);
-	act.sa_flags = 0;
-	if (signo != SIGALRM)
-		act.sa_flags |= SA_RESTART;
+	act.sa_flags = SA_RESTART;
 #ifdef SA_NOCLDSTOP
 	if (signo == SIGCHLD)
 		act.sa_flags |= SA_NOCLDSTOP;