diff options
Diffstat (limited to 'src/interfaces')
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 8 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-protocol3.c | 7 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 77124efe779..4bc5e647153 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -2245,7 +2245,8 @@ PQputCopyEnd(PGconn *conn, const char *errormsg) { if (!conn) return -1; - if (conn->asyncStatus != PGASYNC_COPY_IN) + if (conn->asyncStatus != PGASYNC_COPY_IN && + conn->asyncStatus != PGASYNC_COPY_BOTH) { printfPQExpBuffer(&conn->errorMessage, libpq_gettext("no COPY in progress\n")); @@ -2305,7 +2306,10 @@ PQputCopyEnd(PGconn *conn, const char *errormsg) } /* Return to active duty */ - conn->asyncStatus = PGASYNC_BUSY; + if (conn->asyncStatus == PGASYNC_COPY_BOTH) + conn->asyncStatus = PGASYNC_COPY_OUT; + else + conn->asyncStatus = PGASYNC_BUSY; resetPQExpBuffer(&conn->errorMessage); /* Try to flush data */ diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c index c605bcd734c..e8f3f337b1a 100644 --- a/src/interfaces/libpq/fe-protocol3.c +++ b/src/interfaces/libpq/fe-protocol3.c @@ -1484,7 +1484,12 @@ pqGetCopyData3(PGconn *conn, char **buffer, int async) * expect the state was already changed. */ if (msgLength == -1) - conn->asyncStatus = PGASYNC_BUSY; + { + if (conn->asyncStatus == PGASYNC_COPY_BOTH) + conn->asyncStatus = PGASYNC_COPY_IN; + else + conn->asyncStatus = PGASYNC_BUSY; + } return msgLength; /* end-of-copy or error */ } if (msgLength == 0) |