{
entry->have_prep_stmt = false;
entry->have_error = false;
- /* Also reset per-connection state */
- memset(&entry->state, 0, sizeof(entry->state));
+
+ /*
+ * If pendingAreq of the per-connection state is not
+ * NULL, it means that an asynchronous fetch begun by
+ * fetch_more_data_begin() was not done successfully
+ * and thus the per-connection state was not reset in
+ * fetch_more_data(); in that case reset the
+ * per-connection state here.
+ */
+ if (entry->state.pendingAreq)
+ memset(&entry->state, 0, sizeof(entry->state));
}
/* Disarm changing_xact_state if it all worked. */
curlevel, curlevel);
if (!pgfdw_exec_cleanup_query(entry->conn, sql, false))
abort_cleanup_failure = true;
+ else
+ {
+ /*
+ * If pendingAreq of the per-connection state is not NULL,
+ * it means that an asynchronous fetch begun by
+ * fetch_more_data_begin() was not done successfully and
+ * thus the per-connection state was not reset in
+ * fetch_more_data(); in that case reset the
+ * per-connection state here.
+ */
+ if (entry->state.pendingAreq)
+ memset(&entry->state, 0, sizeof(entry->state));
+ }
}
/* Disarm changing_xact_state if it all worked. */