diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-12-28 17:29:41 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-12-28 17:29:41 +0000 |
commit | 36c9a01acf0026614b4d3ac869962902e7138c62 (patch) | |
tree | baf5b8ff3477d8bf1c4bcfd479c371b59afa6f8b /src | |
parent | f8eed65dfb580f0971e2e6ead83135bfa3ddeb06 (diff) | |
download | postgresql-36c9a01acf0026614b4d3ac869962902e7138c62.tar.gz postgresql-36c9a01acf0026614b4d3ac869962902e7138c62.zip |
Avoid infinite loop if connection is lost during PQexecStart() or
PQexecFinish(). Per report from Andreas Pflug.
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 84b7d2e1c19..eae1b764abb 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.155 2003/11/30 20:55:09 joe Exp $ + * $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.156 2003/12/28 17:29:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1234,6 +1234,9 @@ PQexecStart(PGconn *conn) return false; } } + /* check for loss of connection, too */ + if (conn->status == CONNECTION_BAD) + return false; } /* OK to send a command */ @@ -1256,6 +1259,8 @@ PQexecFinish(PGconn *conn) * * We have to stop if we see copy in/out, however. We will resume parsing * after application performs the data transfer. + * + * Also stop if the connection is lost (else we'll loop infinitely). */ lastResult = NULL; while ((result = PQgetResult(conn)) != NULL) @@ -1281,7 +1286,8 @@ PQexecFinish(PGconn *conn) } lastResult = result; if (result->resultStatus == PGRES_COPY_IN || - result->resultStatus == PGRES_COPY_OUT) + result->resultStatus == PGRES_COPY_OUT || + conn->status == CONNECTION_BAD) break; } |