Reorganize logical replication worker disconnect code

Move the walrcv_disconnect() calls into the before_shmem_exit handler.
This makes sure the call is always made even during exit by signal, it
saves some duplicate code, and it makes the logic more similar to
walreceiver.c.

Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
This commit is contained in:
Peter Eisentraut 2017-06-01 23:05:47 -04:00
parent 2d460179ba
commit 6812330f1c
3 changed files with 6 additions and 9 deletions

View File

@ -614,7 +614,13 @@ logicalrep_launcher_onexit(int code, Datum arg)
static void
logicalrep_worker_onexit(int code, Datum arg)
{
/* Disconnect gracefully from the remote side. */
if (wrconn)
walrcv_disconnect(wrconn);
logicalrep_worker_detach();
ApplyLauncherWakeup();
}
/* SIGTERM: set flag to exit at next convenient time */

View File

@ -140,7 +140,6 @@ finish_sync_worker(void)
CommitTransactionCommand();
/* Stop gracefully */
walrcv_disconnect(wrconn);
proc_exit(0);
}

View File

@ -1329,7 +1329,6 @@ reread_subscription(void)
"stop because the subscription was removed",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
@ -1344,7 +1343,6 @@ reread_subscription(void)
"stop because the subscription was disabled",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
@ -1359,7 +1357,6 @@ reread_subscription(void)
"restart because the connection information was changed",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
@ -1374,7 +1371,6 @@ reread_subscription(void)
"restart because subscription was renamed",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
@ -1392,7 +1388,6 @@ reread_subscription(void)
"restart because the replication slot name was changed",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
@ -1407,7 +1402,6 @@ reread_subscription(void)
"restart because subscription's publications were changed",
MySubscription->name)));
walrcv_disconnect(wrconn);
proc_exit(0);
}
@ -1610,8 +1604,6 @@ ApplyWorkerMain(Datum main_arg)
/* Run the main loop. */
LogicalRepApplyLoop(origin_startpos);
walrcv_disconnect(wrconn);
/* We should only get here if we received SIGTERM */
proc_exit(0);
}