]> granicus.if.org Git - postgresql/commitdiff
Avoid PQisBusy/PQconsumeInput busy loop in case of PQisBusy returning
authorTatsuo Ishii <ishii@postgresql.org>
Mon, 7 Oct 2002 05:10:02 +0000 (05:10 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Mon, 7 Oct 2002 05:10:02 +0000 (05:10 +0000)
false. per Tom Lane's suggestion. See:

Subject: Suggested change to pgbench
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Tatsuo Ishii <t-ishii@sra.co.jp>
Cc: pgsql-patches@postgreSQL.org
Date: Sun, 06 Oct 2002 12:37:27 -0400

for more details.

contrib/pgbench/pgbench.c

index 4eb81ec544c6e359053acff550a9d5a92571df96..2eadf6254194493378cbb169c3111ebbcbf400d7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.19 2002/09/04 20:31:08 momjian Exp $
+ * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.20 2002/10/07 05:10:02 ishii Exp $
  *
  * pgbench: a simple TPC-B like benchmark program for PostgreSQL
  * written by Tatsuo Ishii
@@ -184,17 +184,16 @@ doOne(CState * state, int n, int debug, int ttype)
        {                                                       /* are we receiver? */
                if (debug)
                        fprintf(stderr, "client %d receiving\n", n);
-               while (PQisBusy(st->con) == TRUE)
-               {
-                       if (!PQconsumeInput(st->con))
-                       {                                       /* there's something wrong */
-                               fprintf(stderr, "Client %d aborted in state %d. Probably the backend died while processing.\n", n, st->state);
-                               remains--;              /* I've aborted */
-                               PQfinish(st->con);
-                               st->con = NULL;
-                               return;
-                       }
+               if (!PQconsumeInput(st->con))
+               {                                               /* there's something wrong */
+                       fprintf(stderr, "Client %d aborted in state %d. Probably the backend died while processing.\n", n, st->state);
+                       remains--;                      /* I've aborted */
+                       PQfinish(st->con);
+                       st->con = NULL;
+                       return;
                }
+               if (PQisBusy(st->con))
+                       return;                         /* don't have the whole result yet */
 
                switch (st->state)
                {
@@ -367,17 +366,16 @@ doSelectOnly(CState * state, int n, int debug)
        {                                                       /* are we receiver? */
                if (debug)
                        fprintf(stderr, "client %d receiving\n", n);
-               while (PQisBusy(st->con) == TRUE)
-               {
-                       if (!PQconsumeInput(st->con))
-                       {                                       /* there's something wrong */
-                               fprintf(stderr, "Client %d aborted in state %d. Probably the backend died while processing.\n", n, st->state);
-                               remains--;              /* I've aborted */
-                               PQfinish(st->con);
-                               st->con = NULL;
-                               return;
-                       }
+               if (!PQconsumeInput(st->con))
+               {                                               /* there's something wrong */
+                       fprintf(stderr, "Client %d aborted in state %d. Probably the backend died while processing.\n", n, st->state);
+                       remains--;                      /* I've aborted */
+                       PQfinish(st->con);
+                       st->con = NULL;
+                       return;
                }
+               if (PQisBusy(st->con))
+                       return;                         /* don't have the whole result yet */
 
                switch (st->state)
                {