Skip to content

ext/pdo: Defer persistent handle cleanup to the last owner - #24041

Open
iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/aph-pdo-persistent-teardown-shared-state-f65r-84-work
Open

iliaal wants to merge 1 commit into
php:PHP-8.4from
iliaal:fix/aph-pdo-persistent-teardown-shared-state-f65r-84-work

Conversation

@iliaal

@iliaal iliaal commented Oct 1, 2026

Copy link
Copy Markdown
Member

GH-23962 (#23963) made pdo_dbh_free_storage() skip the rollback while another PDO instance still holds the persistent connection, but the same teardown still runs the driver's persistent_shutdown handler and releases the handle's failed query statement. Destroying one of two persistent SQLite instances therefore unregisters the functions and collations the other one relies on, and resets its errorCode()/errorInfo() to 00000. Both now use the same last-owner check as the rollback, so they run once when the final instance is freed. Drivers whose persistent_shutdown is NULL (pgsql, odbc, firebird, dblib) are unaffected, and mysqlnd's end_psession is deferred the same way.

phpGH-23962 stopped a persistent PDO instance from rolling back a connection
another instance still holds, but its destruction still ran the driver's
persistent_shutdown handler and released the handle's failed query
statement. The surviving instance then lost the SQLite functions and
collations registered through the destroyed one, and its errorCode() and
errorInfo() reverted to 00000. Both now wait for the last instance, like
the rollback.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant