aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-05-29 13:18:48 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-05-29 13:18:48 -0400
commit73f5acce3f5f56189ead7666cf932e52b6c42adb (patch)
tree0503e2699b9b7178299e7cbfb80f8246c3dda5f3
parent937b85805b6e87180bf9e088acfb4ba4e3e3d9bc (diff)
downloadpostgresql-73f5acce3f5f56189ead7666cf932e52b6c42adb.tar.gz
postgresql-73f5acce3f5f56189ead7666cf932e52b6c42adb.zip
Fix missing abort checks in pg_backup_directory.c.
Parallel restore from directory format failed to respond to control-C in a timely manner, because there were no checkAborting() calls in the code path that reads data from a file and sends it to the backend. If any worker was in the midst of restoring data for a large table, you'd just have to wait. This fix doesn't do anything for the problem of aborting a long-running server-side command, but at least it fixes things for data transfers. Back-patch to 9.3 where parallel restore was introduced.
-rw-r--r--src/bin/pg_dump/pg_backup_directory.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c
index d1e660aaae3..22d896c41cc 100644
--- a/src/bin/pg_dump/pg_backup_directory.c
+++ b/src/bin/pg_dump/pg_backup_directory.c
@@ -406,7 +406,12 @@ _PrintFileData(ArchiveHandle *AH, char *filename)
buflen = ZLIB_OUT_SIZE;
while ((cnt = cfread(buf, buflen, cfp)))
+ {
+ /* Are we aborting? */
+ checkAborting(AH);
+
ahwrite(buf, 1, cnt, AH);
+ }
free(buf);
if (cfclose(cfp) !=0)
@@ -543,6 +548,9 @@ _ReadBuf(ArchiveHandle *AH, void *buf, size_t len)
{
lclContext *ctx = (lclContext *) AH->formatData;
+ /* Are we aborting? */
+ checkAborting(AH);
+
/*
* If there was an I/O error, we already exited in cfread(), so here we
* exit on short reads.