From: Tom Lane Date: Sun, 28 Dec 2003 17:29:51 +0000 (+0000) Subject: Avoid infinite loop if connection is lost during PQexecStart() or X-Git-Tag: REL7_4_2~96 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2315548ed7a8dda84316f325eb633c6f0c09b842;p=postgresql Avoid infinite loop if connection is lost during PQexecStart() or PQexecFinish(). Per report from Andreas Pflug. --- diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 03fec88e67..1c557a10ae 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.153.2.1 2003/11/30 20:53:43 joe Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.153.2.2 2003/12/28 17:29:51 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; }