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.
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)
{
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.