]> granicus.if.org Git - postgresql/commitdiff
Fix "pg_bench -C -M prepared".
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Mar 2016 03:18:07 +0000 (23:18 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Mar 2016 03:18:07 +0000 (23:18 -0400)
This didn't work because when we dropped and re-established a database
connection, we did not bother to reset session-specific state such as
the statements-are-prepared flags.

The st->prepared[] array certainly needs to be flushed, and I cleared a
couple of other fields as well that couldn't possibly retain meaningful
state for a new connection.

In passing, fix some bogus comments and strange field order choices.

Per report from Robins Tharakan.

src/bin/pgbench/pgbench.c

index 5a3c6cd527f86735390d6a848372302b117f2d55..d1f1ad28374536eeba02f0516d6babd333054af5 100644 (file)
@@ -230,9 +230,9 @@ typedef struct
        int                     id;                             /* client No. */
        int                     state;                  /* state No. */
        bool            listen;                 /* whether an async query has been sent */
-       bool            is_throttled;   /* whether transaction throttling is done */
        bool            sleeping;               /* whether the client is napping */
        bool            throttling;             /* whether nap is for throttling */
+       bool            is_throttled;   /* whether transaction throttling is done */
        Variable   *variables;          /* array of variable definitions */
        int                     nvariables;
        int64           txn_scheduled;  /* scheduled start time of transaction (usec) */
@@ -1522,6 +1522,13 @@ top:
                }
                INSTR_TIME_SET_CURRENT(end);
                INSTR_TIME_ACCUM_DIFF(thread->conn_time, end, start);
+
+               /* Reset session-local state */
+               st->listen = false;
+               st->sleeping = false;
+               st->throttling = false;
+               st->is_throttled = false;
+               memset(st->prepared, 0, sizeof(st->prepared));
        }
 
        /*