]> granicus.if.org Git - postgresql/commitdiff
Have walsenders participate in procsignal infrastructure.
authorAndres Freund <andres@anarazel.de>
Tue, 6 Jun 2017 01:53:41 +0000 (18:53 -0700)
committerAndres Freund <andres@anarazel.de>
Tue, 6 Jun 2017 02:18:16 +0000 (19:18 -0700)
The non-participation in procsignal was a problem for both changes in
master, e.g. parallelism not working for normal statements run in
walsender backends, and older branches, e.g. recovery conflicts and
catchup interrupts not working for logical decoding walsenders.

This commit thus replaces the previous WalSndXLogSendHandler with
procsignal_sigusr1_handler.  In branches since db0f6cad48 that can
lead to additional SetLatch calls, but that only rarely seems to make
a difference.

Author: Andres Freund
Reviewed-By: Michael Paquier
Discussion: https://postgr.es/m/20170421014030.fdzvvvbrz4nckrow@alap3.anarazel.de
Backpatch: 9.4, earlier commits don't seem to benefit sufficiently

src/backend/replication/walsender.c

index 834bf947a37a1741a01e7414fa0fbee9d3f0540e..b7acedc0c61510474451b24a27f94329b9f2424e 100644 (file)
@@ -186,7 +186,6 @@ static XLogRecPtr logical_startptr = InvalidXLogRecPtr;
 
 /* Signal handlers */
 static void WalSndSigHupHandler(SIGNAL_ARGS);
-static void WalSndXLogSendHandler(SIGNAL_ARGS);
 static void WalSndLastCycleHandler(SIGNAL_ARGS);
 
 /* Prototypes for private functions */
@@ -2577,17 +2576,6 @@ WalSndSigHupHandler(SIGNAL_ARGS)
        errno = save_errno;
 }
 
-/* SIGUSR1: set flag to send WAL records */
-static void
-WalSndXLogSendHandler(SIGNAL_ARGS)
-{
-       int                     save_errno = errno;
-
-       latch_sigusr1_handler();
-
-       errno = save_errno;
-}
-
 /* SIGUSR2: set flag to do a last cycle and shut down afterwards */
 static void
 WalSndLastCycleHandler(SIGNAL_ARGS)
@@ -2621,7 +2609,7 @@ WalSndSignals(void)
        pqsignal(SIGQUIT, quickdie);    /* hard crash time */
        InitializeTimeouts();           /* establishes SIGALRM handler */
        pqsignal(SIGPIPE, SIG_IGN);
-       pqsignal(SIGUSR1, WalSndXLogSendHandler);       /* request WAL sending */
+       pqsignal(SIGUSR1, procsignal_sigusr1_handler);
        pqsignal(SIGUSR2, WalSndLastCycleHandler);      /* request a last cycle and
                                                                                                 * shutdown */