OSDN Git Service

Avoid infinite loop if connection is lost during PQexecStart() or
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 28 Dec 2003 17:29:41 +0000 (17:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 28 Dec 2003 17:29:41 +0000 (17:29 +0000)
PQexecFinish().  Per report from Andreas Pflug.

src/interfaces/libpq/fe-exec.c

index 84b7d2e..eae1b76 100644 (file)
@@ -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;
        }