Skip to content

fix(pg-cursor): preserve cursor state after late responses - #3785

Open
mwolting wants to merge 1 commit into
brianc:masterfrom
mwolting:matthijs/pg-cursor-late-responses
Open

mwolting wants to merge 1 commit into
brianc:masterfrom
mwolting:matthijs/pg-cursor-late-responses

Conversation

@mwolting

Copy link
Copy Markdown

When a cursor closes before its first backend response arrives, late responses can reset its state and send a second Close/Sync pair. The extra ReadyForQuery can advance the client's query queue too early and corrupt the next query's result.

Preserve closed and failed states when handling late descriptions, and keep closed cursors closed when delivering rows. Fields and the active read callback still get delivered.

Add focused late-message tests and a PostgreSQL regression that closes before responses arrive, checks for a single Sync, and reuses the connection.

When a cursor closes before its first backend response arrives, late responses can reset its state and send a second Close/Sync pair. The extra ReadyForQuery can advance the client's query queue too early and corrupt the next query's result.

Preserve closed and failed states when handling late descriptions, and keep closed cursors closed when delivering rows. Fields and the active read callback still get delivered.

Add focused late-message tests and a PostgreSQL regression that closes before responses arrive, checks for a single Sync, and reuses the connection.

Settlement of reads left in the cursor's queue remains outside this fix.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant