diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 99529de52a5..b67ad5e8231 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -1214,20 +1214,6 @@ doConnect(void) return conn; } -/* throw away response from backend */ -static void -discard_response(CState *state) -{ - PGresult *res; - - do - { - res = PQgetResult(state->con); - if (res) - PQclear(res); - } while (res); -} - /* qsort comparator for Variable array */ static int compareVariableNames(const void *v1, const void *v2) @@ -2732,6 +2718,7 @@ static bool readCommandResponse(CState *st, char *varprefix) { PGresult *res; + PGresult *next_res; int qrynum = 0; res = PQgetResult(st->con); @@ -2739,7 +2726,7 @@ readCommandResponse(CState *st, char *varprefix) while (res != NULL) { /* look now at the next result to know whether it is the last */ - PGresult *next_res = PQgetResult(st->con); + next_res = PQgetResult(st->con); bool is_last = (next_res == NULL); switch (PQresultStatus(res)) @@ -2751,8 +2738,7 @@ readCommandResponse(CState *st, char *varprefix) fprintf(stderr, "client %d script %d command %d query %d: expected one row, got %d\n", st->id, st->use_file, st->command, qrynum, 0); - st->ecnt++; - return false; + goto error; } break; @@ -2764,10 +2750,7 @@ readCommandResponse(CState *st, char *varprefix) fprintf(stderr, "client %d script %d command %d query %d: expected one row, got %d\n", st->id, st->use_file, st->command, qrynum, PQntuples(res)); - st->ecnt++; - PQclear(res); - discard_response(st); - return false; + goto error; } /* store results into variables */ @@ -2788,10 +2771,7 @@ readCommandResponse(CState *st, char *varprefix) "client %d script %d command %d query %d: error storing into variable %s\n", st->id, st->use_file, st->command, qrynum, varname); - st->ecnt++; - PQclear(res); - discard_response(st); - return false; + goto error; } if (*varprefix != '\0') @@ -2807,10 +2787,7 @@ readCommandResponse(CState *st, char *varprefix) "client %d script %d aborted in command %d query %d: %s", st->id, st->use_file, st->command, qrynum, PQerrorMessage(st->con)); - st->ecnt++; - PQclear(res); - discard_response(st); - return false; + goto error; } PQclear(res); @@ -2826,8 +2803,19 @@ readCommandResponse(CState *st, char *varprefix) } return true; -} +error: + st->ecnt++; + PQclear(res); + PQclear(next_res); + do + { + res = PQgetResult(st->con); + PQclear(res); + } while (res); + + return false; +} /* * Parse the argument to a \sleep command, and return the requested amount