diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index b956052014..63d903ac02 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -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 */ diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index fe45fb8820..515724e102 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -140,7 +140,6 @@ finish_sync_worker(void) CommitTransactionCommand(); /* Stop gracefully */ - walrcv_disconnect(wrconn); proc_exit(0); } diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index c67720bd2f..ea3ba1d5b4 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -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); }