diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index ea7ec2729a9..1c8c7b95dad 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -3823,11 +3823,11 @@ PostgresMain(int argc, char *argv[], const char *dbname, const char *username) { - int firstchar; - StringInfoData input_message; sigjmp_buf local_sigjmp_buf; + + /* these must be volatile to ensure state is preserved across longjmp: */ volatile bool send_ready_for_query = true; - bool disable_idle_in_transaction_timeout = false; + volatile bool disable_idle_in_transaction_timeout = false; /* Initialize startup process environment if necessary. */ if (!IsUnderPostmaster) @@ -4111,8 +4111,9 @@ PostgresMain(int argc, char *argv[], * query cancels from being misreported as timeouts in case we're * forgetting a timeout cancel. */ - disable_all_timeouts(false); - QueryCancelPending = false; /* second to avoid race condition */ + disable_all_timeouts(false); /* do first to avoid race condition */ + QueryCancelPending = false; + disable_idle_in_transaction_timeout = false; /* Not reading from the client anymore. */ DoingCommandRead = false; @@ -4201,6 +4202,9 @@ PostgresMain(int argc, char *argv[], for (;;) { + int firstchar; + StringInfoData input_message; + /* * At top of loop, reset extended-query-message flag, so that any * errors encountered in "idle" state don't provoke skip.